Resimleri Dönüştürme

Resimleri Siyah Beyaz ve Gri Tonlama Formuna Dönüştürme

Bazen, basım veya arşivleme amaçları için renkli resimleri siyah beyaz veya gri tonlama formuna dönüştürmeniz gerekebilir. Bu makale, bunu başarmak için Aspose.PSD API’sının Java kullanarak kullanımını gösteren iki yöntemi aşağıda belirtilen şekilde kullanmayı göstermektedir.

  • Binarizasyon
  • Gri Tonlama

Binarizasyon

Binarizasyon kavramını anlamak için, bir Binari Resim’i tanımlamak önemlidir; yani her piksel için yalnızca iki mümkün değeri olan dijital bir resim. Normalde, bir binari resim için kullanılan iki renk siyah ve beyazdır, ancak herhangi iki renk de kullanılabilir. Binarizasyon, her pikselin bir bit olarak saklandığı bi-seviyeli bir resme dönüştürme işlemidir (0 veya 1), burada 0 renksizliği, 1 renk varlığını ifade eder. Aspose.PSD Java API şu anda iki Binarizasyon yöntemini desteklemektedir.

Sabit Eşikli Binarizasyon

Aşağıdaki kod örneği, sabit eşikli binarizasyonun bir resme nasıl uygulanacağını göstermektedir.

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());
}

Otsu Eşikli Binarizasyon

Aşağıdaki kod örneği, Otsu eşikli binarizasyonun bir resme nasıl uygulanacağını göstermektedir.

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());
}

Gri Tonlama

Gri Tonlama, sürekli tonlu bir resmi kesintisiz gri tonlar içeren bir resme dönüştürme işlemidir. Aşağıdaki kod örneği, Gri Tonlama’nın nasıl kullanılacağını göstermektedir.

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 Resim Katmanlarını TIFF Resme Dönüştürme

Bazen, bir PSD Resmin katmanlarını başka bir raster resim formatına dönüştürmek uygulama gereksinimini karşılamak için gereklidir. Aspose.PSD API, bir PSD Resminin katmanlarını başka bir raster resim formatına dönüştürme özelliğini destekler. İlk olarak, resmin bir örneğini oluşturacak ve yerel diskin PSD resmini yükleyeceğiz, ardından Her bir katmanda yinelenen bir işlem yapacağız. Daha sonra bloğu TIFF resme dönüştüreceğiz. Aşağıdaki kod örneği, PSD resim katmanlarını TIFF resimlere dönüştürmenin nasıl yapılacağını göstermektedir.

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’yi CMYK TIFF’e Dönüştürme

Aspose.PSD for Java ile, geliştiriciler CMYK PSD dosyasını CMYK tiff formatına dönüştürebilir. Bu makale, Aspose.PSD kullanarak CMYK PSD dosyasını CMYK tiff formatına nasıl dönüştüreceğinizi göstermektedir. Aspose.PSD for Java ile PSD resimleri yüklenebilir ve TiffOptions sınıfını kullanarak çeşitli özellikler ayarlanabilir ve resmin kaydedilmesi veya dışa aktarılması sağlanabilir. Aşağıdaki kod örneği, bu özelliğin nasıl gerçekleştirileceğini göstermektedir.

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));
}

Resimleri Dışa Aktarma

Aspose.PSD, PSD dosya formatlarını diğer formatlara dönüştürmek için özel sınıflar sağlamanın yanı sıra zengin bir dizi resim işleme rutini sunar. Bu kütüphane kullanılarak PSD resimlerinin dönüştürülmesi çok basit ve sezgiseldir. Bu amaç için ImageOptions ad alanında bazı özel sınıflar aşağıda belirtilmiştir.

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

Aspose.PSD for Java API ile PSD resimlerini dışa aktarmak çok kolaydır. İhtiyacınız olan tek şey ImageOptions ad alanından uygun bir sınıf nesnesidir. Bu sınıfları kullanarak, Aspose.PSD ile oluşturulmuş, düzenlenmiş veya sadece yüklenmiş herhangi bir resmi desteklenen herhangi bir formata kolayca dışa aktarabilirsiniz.

Resimleri Birleştirme

Bu örnek, Graphics sınıfını kullanır ve iki veya daha fazla resmi tek bir tam resim içine nasıl birleştireceğinizi gösterir. İşlemi göstermek için, örnek olarak yeni bir PsdImage oluşturur ve Graphics sınıfı tarafından sergilenen Draw Image metodu kullanılarak Resimleri kanvas yüzeyine çizer. Graphics sınıfı kullanılarak iki veya daha fazla resim, sonuç resminin görünümünde aralık olmadan ve sayfa olmaksızın birleştirilebilir. Kanvas boyutu sonuç resmin boyutuna eşit olmalıdır. Aşağıdaki kod örneği, resimleri bir arada birleştirmek için Graphics sınıfının Draw Image metodu nasıl kullanılacağını göstermektedir.

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();
}

Resimleri Genişletme ve Kırpma

Aspose.PSD API, resmi resim dönüşüm işlemi sırasında genişletebilir veya kırparak gerçekleştirme izni verir. Geliştirici, yüklenen resmin genişlemesi veya kırpılması için X ve Y koordinatlarını içeren bir dikdörtgen oluşturmalı ve dikdörtgen kutusunun genişliğini ve yüksekliğini belirtmelidir. Dikdörtgenin X,Y ve Genişlik, Yüksekliği, yüklenen resmin genişletilmesi veya kırpılması işlemini belirtecek. Resim dönüşümü sırasında resmi genişletmek veya kırpmanız gerekiyorsa, aşağıdaki adımları uygulayın:

  1. Bir RasterImage sınıfı örneği oluşturun ve mevcut resmi yükleyin.
  2. Bir ImageOption sınıfı Örneği oluşturun.
  3. Bir Rectangle sınıfı örneği oluşturun ve dikdörtgenin X,Y ve Genişlik, Yükseklik değerlerini başlatın.
  4. RasterImage sınıfının Save metodu çağırın ve çıktı dosya adını, resim seçeneklerini ve dikdörtgen nesnesini parametre olarak geçirin.
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 Verilerini Okuma ve Yazma

XMP (Genişletilebilir Meta Veri Platformu), bir ISO standardıdır. XMP, genişletilebilir meta verilerin tanımı ve işlenmesi için bir veri modeli, bir serileştirme biçimi ve temel özellikleri standartlaştırır. Ayrıca XMP bilgilerini popüler bir görüntü dosyasına (örneğin JPEG) gömmek için bir rehber sağlar. Aspose.PSD for Java API’sını kullanarak geliştiriciler, XMP meta verilerini görüntülere okuyabilir veya yazabilirler. Bu makale, XMP meta verilerinin bir görüntüden nasıl okunabileceğini ve görüntülere XMP meta verilerinin nasıl yazılabileceğini göstermektedir.

XMP Meta Verisi Oluşturma, Yazma ve Dosyadan Okuma

XMP ad alanını kullanarak, geliştirici XMP meta veri nesnesi oluşturabilir ve bunu bir görüntüye yazabilir. Aşağıdaki kod örneği, XMP ad alanında bulunan XmpHeaderPi, XmpTrailerPi, XmpMeta, XmpPacketWrapper, PhotoshopPackage ve DublinCorePackage paketlerinin nasıl kullanılacağını göstermektedir.

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");
}

Çok İş Parçacıklı Ortamda Resimleri Dışa Aktarma

Aspose.PSD for Java artık çok iş parçacıklı ortamda resimleri dönüştürmeyi desteklemektedir. Aspose.PSD for Java, kodun çok iş parçacıklı ortamda çalıştırılması sırasında işlemlerin optimize edilmiş performansını sağlar. Aspose.PSD for Java’daki tüm resim seçenek sınıfları (örneğin BmpOptions, TiffOptions, JpegOptions, vb.) IDisposable arabirimini uygular. Bu nedenle, Kaynak özelliği ayarlandığında resim seçenek sınıf nesnesinin uygun şekilde atılması geliştirici için bir zorunluluktur. Aşağıdaki kod örneği, söz konusu işlevselliği açıklamaktadır.

String dataDir = Utils.getDataDir(ExportImagesinMultiThreadEnv.class) + "Conversion/";
String imageDataPath = dataDir + "sample.psd";
try {
FileInputStream fileStream = new FileInputStream(imageDataPath);
PsdOptions psdOptions = new PsdOptions();
// Set the source property of the imaging option class object.
psdOptions.setSource(new StreamSource(fileStream));
// Following is the sample processing on the image.
RasterImage image = (RasterImage) Image.create(psdOptions, 10, 10);
Color[] pixels = new Color[4];
for (int i = 0; i < 4; ++i) {
pixels[i] = Color.fromArgb(40, 30, 20, 10);
}
image.savePixels(new Rectangle(0, 0, 2, 2), pixels);
image.save();
} finally {
// Delete the output file.
File f = new File(imageDataPath);
if (f.exists()) {
f.delete();
}
}

Aspose.PSD şimdi çok iş parçacıklı ortamda çalışırken SyncRoot özelliğini destekler. Geliştiriciler, bu özelliği kaynak akışına erişimi senkronize etmek için kullanabilirler. Aşağıdaki kod örneği, SyncRoot özelliğinin nasıl kullanılabileceğini göstermektedir.

String dataDir = Utils.getDataDir(SyncRoot.class) + "Conversion/";
// Create an instance of Stream container class and assign memory stream object.
StreamContainer streamContainer = new StreamContainer(new java.io.ByteArrayInputStream(new byte[0]));
try {
// check if the access to the stream source is synchronized.
synchronized (streamContainer.getSyncRoot()) {
// do work
// now access to streamContainer is synchronized
}
} finally {
streamContainer.dispose();
}