تبدیل تصاویر

تبدیل تصاویر به سیاه و سفید و خاکستری

گاهی اوقات ممکن است نیاز داشته باشید که تصاویر رنگی را به سیاه و سفید یا خاکستری تبدیل کنید برای چاپ یا انبارداری. این مقاله استفاده از API Aspose.PSD برای Java را برای دستیابی به این هدف با استفاده از دو روش که در زیر ذکر شده است، نشان می‌دهد.

  • باینری‌سازی
  • خاکستری‌سازی

باینری‌سازی

برای درک مفهوم باینری‌سازی، مهم است تا تصویری دوگانه (Binary Image) را تعریف کنیم؛ به این معنی که تصویر دیجیتال می‌تواند برای هر پیکسل فقط دو مقدار ممکن داشته باشد. به طور معمول، دو رنگ استفاده شده برای تصویر دوگانه سیاه و سفید هستند اگرچه هر دو رنگ می‌تواند استفاده شود. باینری‌سازی فرآیند تبدیل تصویر به سطوح دودویی است به این معنی که هر پیکسل به عنوان یک بیت تمام شود (0 یا 1) که 0 عدم وجود رنگ را نشان می‌دهد و 1 به معنی حضور رنگ است. API Aspose.PSD برای Java در حال حاضر دو روش باینری‌سازی را پشتیبانی می‌کند.

باینری‌سازی با آستانه ثابت

کد گفته شده نشان می‌دهد چگونه می‌توانید از باینری‌سازی با آستانه ثابت برای یک تصویر استفاده کنید.

String dataDir = Utils.getDataDir(BinarizationWithFixedThreshold.class) + "Conversion/";
String sourceFile = dataDir + "sample.psd";
String destName = dataDir + "BinarizationWithFixedThreshold_out.jpg";
try (Image image = Image.load(sourceFile);
RasterCachedImage rasterCachedImage = (RasterCachedImage) image) {
if (!rasterCachedImage.isCached()) {
// Cache image if not already cached
rasterCachedImage.cacheData();
}
// Binarize image with predefined fixed threshold and Save the resultant image
rasterCachedImage.binarizeFixed((byte) 100);
rasterCachedImage.save(destName, new JpegOptions());
}

باینری‌سازی با آستانه اوتسو

کد گفته شده نشان می‌دهد چگونه باینری‌سازی با آستانه اوتسو را برای یک تصویر اعمال کنید.

String dataDir = Utils.getDataDir(BinarizationWithOtsuThreshold.class) + "Conversion/";
String sourceFile = dataDir + "sample.psd";
String destName = dataDir + "BinarizationWithOtsuThreshold_out.jpg";
try (Image image = Image.load(sourceFile);
// Cast the image to RasterCachedImage and Check if image is cached
RasterCachedImage rasterCachedImage = (RasterCachedImage) image) {
if (!rasterCachedImage.isCached()) {
// Cache image if not already cached
rasterCachedImage.cacheData();
}
// Binarize image with Otsu Thresholding and Save the resultant image
rasterCachedImage.binarizeOtsu();
rasterCachedImage.save(destName, new JpegOptions());
}

خاکستری‌سازی

خاکستری‌سازی فرآیند تبدیل تصویر با تون‌های خاکستری پیوسته به یک تصویر با سایه‌های خاکستری ناپیوسته است. کد گفته شده نشان می‌دهد چگونه می‌توانید از خاکستری‌سازی استفاده کنید.

String dataDir = Utils.getDataDir(GrayScaling.class) + "Conversion/";
String sourceFile = dataDir + "sample.psd";
String destName = dataDir + "Grayscaling_out.jpg";
try (Image image = Image.load(sourceFile)) {
// Cast the image to RasterCachedImage and Check if image is cached
RasterCachedImage rasterCachedImage = (RasterCachedImage) image;
if (!rasterCachedImage.isCached()) {
// Cache image if not already cached
rasterCachedImage.cacheData();
}
// Transform image to its grayscale representation and Save the resultant image
rasterCachedImage.grayscale();
rasterCachedImage.save(destName, new JpegOptions());
}

تبدیل لایه‌های تصویر GIF به تصویر TIFF

گاهی اوقات نیاز است تا لایه‌های یک تصویر PSD را به یک فرمت تصویر پیکسلی دیگر برای برآورد نیاز یک برنامه استخراج و تبدیل کنیم. API Aspose.PSD پشتیبانی از قابلیت استخراج و تبدیل لایه‌های یک تصویر PSD به فرمت تصویر پیکسلی دیگر دارد. ابتدا، موارد زیر را انجام دهیم: مثال ساختن نمونه تصویر و بارگذاری تصویر PSD از دیسک محلی، سپس به ازای هر لایه در خواص لایه حلقه خواهیم زد. سپس بلوک را به تصویر TIFF تبدیل می‌کنیم. کد گفته شده نشان می‌دهد چگونه می‌توانید لایه‌های تصویر PSD را به تصاویر TIFF تبدیل کنید.

String dataDir = Utils.getDataDir(GIFImageLayersToTIFF.class) + "Conversion/";
String sourceFile = dataDir + "sample.psd";
// Load a PSD image and Convert the image's layers to Tiff images.
try (PsdImage image = (PsdImage) Image.load(sourceFile)) {
// Iterate through array of PSD layers
for (int i = 0; i < image.getLayers().length; i++) {
// Get PSD layer.
Layer layer = image.getLayers()[i];
// Create an instance of TIFF Option class and Save the PSD layer as TIFF image
TiffOptions objTiff = new TiffOptions(TiffExpectedFormat.TiffDeflateRgb);
layer.save("output" + i + "_out.tiff", objTiff);
}
}

تبدیل CMYK PSD به CMYK TIFF

با استفاده از Aspose.PSD برای Java، توسعه‌دهندگان می‌توانند فایل CMYK PSD را به فرمت TIFF CMYK تبدیل کنند. این مقاله نشان می‌دهد چگونه می‌توانید فایل CMYK PSD را به فرمت TIFF CMYK با استفاده از Aspose.PSD صادر یا تبدیل کنید. با استفاده از Aspose.PSD برای Java می‌توانید تصاویر PSD را بارگذاری کرده و سپس می‌توانید خصوصیات مختلف را با کلاس TiffOptions تنظیم کرده و تصویر را ذخیره یا صادر کرد. کد گفته شده نشان می‌دهد چگونه می‌توانید از این ویژگی استفاده کنید.

String dataDir = Utils.getDataDir(CMYKPSDtoCMYKTiff.class) + "Conversion/";
String sourceFile = dataDir + "sample.psd";
String destName = dataDir + "output.tiff";
try (Image image = Image.load(sourceFile)) {
image.save(destName, new TiffOptions(TiffExpectedFormat.TiffLzwCmyk));
}

صادرات تصاویر

به همراه یک مجموعه دستورالعمل پردازش تصاویر، Aspose.PSD کلاس‌های ویژه‌ای را برای تبدیل فرمت‌های فایل PSD به فرمت‌های دیگر فراهم می‌کند. با استفاده از این کتابخانه، تبدیل تصاویر PSD بسیار ساده و شفاف است. زیرا، کلاس‌های ویژه‌ای برای این منظور در فضای نام ImageOptions وجود دارد.

  • BmpOptions
  • GifOptions
  • JpegOptions
  • Jpeg2000Options
  • TiffOptions
  • PngOptions

صادر کردن تصاویر PSD با استفاده از API Aspose.PSD برای Java بسیار آسان است. تنها نیاز به یک شیء از کلاس مناسب از فضای نام ImageOptions دارید. با استفاده از این کلاس‌ها، می‌توانید به راحتی هر تصویری که با Aspose.PSD برای Java ایجاد، ویرایش یا فقط بارگیری شده است، را به هر فرمت پشتیبانی شده تبدیل کنید.

ترکیب تصاویر

این مثال از کلاس Graphics استفاده می‌کند و نشان می‌دهد چگونه می‌توانید دو یا چند تصویر را در یک تصویر کامل ترکیب کنید. برای نشان دادن این عمل، مثال یک تصویر PsdImage جدید ایجاد می‌کند و تصاویر را بر روی سطح کانونی با استفاده از روش Draw Image در کلاس Graphics نقاشی می‌کند. با استفاده از کلاس Graphics، دو یا چند تصویر می‌توانند به گونه‌ای ترکیب شوند که تصویر حاصل به عنوان یک تصویر کامل بدون فاصله بین بخش‌های تصویر و صفحات جلوه دارد. اندازه کانون باید برابر اندازه تصویر حاصل شده باشد. دنباله کد زیر نشان دهنده نحوه استفاده از روش Draw Image از کلاس Graphics برای ترکیب تصاویر در تصویر تکی است.

String dataDir = Utils.getDataDir(CombiningImages.class) + "DrawingAndFormattingImages/";
// Create an instance of PsdOptions and set its various properties
PsdOptions imageOptions = new PsdOptions();
// Create an instance of FileCreateSource and assign it to Source property
imageOptions.setSource(new FileCreateSource(dataDir + "Two_images_result_out.psd", false));
try (Image image = Image.create(imageOptions, 600, 600)) {
// Create and initialize an instance of Graphics, Clear the image surface with white color and Draw Image
Graphics graphics = new Graphics(image);
graphics.clear(Color.getWhite());
graphics.drawImage(Image.load(dataDir + "example1.psd"), 0, 0, 300, 600);
graphics.drawImage(Image.load(dataDir + "example2.psd"), 300, 0, 300, 600);
image.save();
}

گسترش و قطع تصاویر

API Aspose.PSD به شما اجازه می‌دهد تا هنگام فرآیند تبدیل تصویر آن را گسترش یا قطع کنید. توسعه‌دهنده باید یک مستطیل با X و Y مختصات ایجاد کند و عرض و ارتفاع جعبه مستطیل را مشخص کند. X، Y و عرض، ارتفاع مستطیل گسترش یا قطع تصویر بارگیر شده را نشان می‌دهد. اگر نیازی به گسترش یا قطع تصویر در حین تبدیل تصویر باشد، مراحل زیر را انجام دهید:

  1. نمونه ای از کلاس RasterImage ایجاد کرده و تصویر موجود را بارگیری کنید.
  2. نمونه‌ای از کلاس ImageOption ایجاد کنید.
  3. یک نمونه از کلاس Rectangle ایجاد کنید و مختصات X، Y و عرض، ارتفاع مستطیل را مقدمه کنید
  4. روش Save کلاس RasterImage را فراخوانی کنید در حالی که نام فایل خروجی، گزینه‌های تصویر و شیء مستطیل را به عنوان پارامترها منتقل می‌کنید.
String dataDir = Utils.getDataDir(ExpandAndCropImages.class) + "DrawingAndFormattingImages/";
String sourceFile = dataDir + "example1.psd";
String destName = dataDir + "jpeg_out.jpg";
try (RasterImage rasterImage = (RasterImage) Image.load(sourceFile)) {
rasterImage.cacheData();
// Create an instance of Rectangle class and define X,Y and Width, height of the rectangle, and Save output image
Rectangle destRect = new Rectangle(-200, -200, 300, 300);
rasterImage.save(destName, new JpegOptions(), destRect);
}

خواندن و نوشتن اطلاعات XMP به تصاویر

XMP (Extensible Metadata Platform) استاندارد ISO است. XMP یک مدل داده، یک فرمت سریالیزاسیون و ویژگی‌های هسته‌ای برای تعریف و پردازش فراداده قابل گسترش استانداردی است. همچنین راهنمایی برای نهادن اطلاعات XMP در تصاویر معروف مانند JPEG را بدون شکستن خواندنی بودنشان برای برنامه‌هایی که از XMP پشتیبا نکنند، فراهم می‌کند. با استفاده از Aspose.PSD برای Java، توسعه‌دهندگان می‌توانند فراداده XMP را از تصاویر بخوانند یا به تصاویر بنویسند. این مقاله نشان می‌دهد چگونه می‌توان اطلاعات فراداده XMP را از یک تصویر بخواند و آن را به تصاویر بنویسد.

ایجاد اطلاعات فراداده XMP، آن را ایجاد کنید و از پرونده بخوانید

با کمک فضای نام XMP، توسعه‌دهندگان می‌توانند شیء اطلاعات فراداده XMP را ایجاد و آن را به یک تصویر بنویسید. کد گفته شده نشان می‌دهد چگونه می‌توانید از پکیج‌های XmpHeaderPi، XmpTrailerPi، XmpMeta، XmpPacketWrapper، PhotoshopPackage و DublinCorePackage موجود در فضای نام XMP استفاده کنید.

String dataDir = Utils.getDataDir(CreateXMPMetadata.class) + "DrawingAndFormattingImages/";
// Specify the size of image by defining a Rectangle
Rectangle rect = new Rectangle(0, 0, 100, 200);
// create the brand new image just for sample purposes
try (PsdImage image = new PsdImage(rect.getWidth(), rect.getHeight())) {
// create an instance of XMP-Header
XmpHeaderPi xmpHeader = new XmpHeaderPi();
xmpHeader.setGuid(dataDir);
// create an instance of Xmp-TrailerPi
XmpTrailerPi xmpTrailer = new XmpTrailerPi(true);
// create an instance of XMPmeta class to set different attributes
XmpMeta xmpMeta = new XmpMeta();
xmpMeta.addAttribute("Author", "Mr Smith");
xmpMeta.addAttribute("Description", "The fake metadata value");
// create an instance of XmpPacketWrapper that contains all metadata
XmpPacketWrapper xmpData = new XmpPacketWrapper(xmpHeader, xmpTrailer, xmpMeta);
// create an instacne of Photoshop package and set photoshop attributes
PhotoshopPackage photoshopPackage = new PhotoshopPackage();
photoshopPackage.setCity("London");
photoshopPackage.setCountry("England");
photoshopPackage.setColorMode(ColorMode.Rgb);
// add photoshop package into XMP metadata
xmpData.addPackage(photoshopPackage);
// create an instacne of DublinCore package and set dublinCore attributes
DublinCorePackage dublinCorePackage = new DublinCorePackage();
dublinCorePackage.setAuthor("Charles Bukowski");
dublinCorePackage.setTitle("Confessions of a Man Insane Enough to Live With the Beasts");
dublinCorePackage.addValue("dc:movie", "Barfly");
// add dublinCore Package into XMP metadata
xmpData.addPackage(dublinCorePackage);
MemoryStream ms = new MemoryStream();
// update XMP metadata into image
image.setXmpData(xmpData);
// Save image on the disk or in memory stream
image.save(dataDir + "create_XMP_Metadata.psd");
}

صادرات تصاویر در محیط چندنخی

Aspose.PSD برای Java اکنون پشتیبانی از تبدیل تصاویر در محیط چندنخی دارد. Aspose.PSD برای Java اطمینان از عملکرد بهینه عملیات هنگام اجرای کد در محیط چندنخی فراهم می‌کند. همه کلاس‌های گزینه تصویر (به عنوان مثال BmpOptions، TiffOptions، JpegOptions و غیره) در Aspose.PSD برای Java