Mengonversi Gambar

Mengonversi Gambar Menjadi Hitam Putih dan Skala Abu-abu

Terkadang Anda mungkin perlu mengonversi gambar berwarna menjadi hitam putih atau skala abu-abu untuk mencetak atau menyimpan arsip. Artikel ini menunjukkan penggunaan Aspose.PSD untuk API .NET guna mencapai hal ini dengan menggunakan dua metode seperti dijelaskan di bawah ini.

  • Binarisasi
  • Skala Abu-abu

Binarisasi

Untuk memahami konsep Binarisasi, penting untuk mendefinisikan sebuah Gambar Biner; yaitu gambar digital yang hanya dapat memiliki dua nilai mungkin untuk setiap piksel. Biasanya, dua warna yang digunakan untuk gambar biner adalah hitam dan putih meskipun dapat digunakan dua warna apa pun. Binarisasi adalah proses mengonversi gambar menjadi bi-level yang berarti setiap piksel disimpan sebagai satu bit (0 atau 1) di mana 0 menunjukkan ketiadaan warna dan 1 berarti kehadiran warna. API Aspose.PSD untuk .NET saat ini mendukung dua metode Binarisasi.

Binarisasi dengan Ambang Batas Tetap

Potongan kode berikut menunjukkan bagaimana menggunakan binarisasi ambang tetap yang dapat diterapkan pada gambar.

// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET
string sourceFile = dataDir + @"sample.psd";
string destName = dataDir + @"BinarizationWithFixedThreshold_out.jpg";
// Load an image
using (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 predefined fixed threshold and Save the resultant image
rasterCachedImage.BinarizeFixed(100);
rasterCachedImage.Save(destName, new JpegOptions());
}

Binarisasi dengan Ambang Otsu

Potongan kode berikut menunjukkan bagaimana menggunakan binarisasi ambang Otsu yang dapat diterapkan pada gambar.

// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET
string sourceFile = dataDir + @"sample.psd";
string destName = dataDir + @"BinarizationWithOtsuThreshold_out.jpg";
// Load an image
using (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());
}

Skala Abu-abu

Skala abu-abu adalah proses mengonversi gambar tone kontinu menjadi gambar dengan nuansa abu-abu yang terputus. Potongan kode berikut menunjukkan cara menggunakan Skala Abu-abu.

Mengonversi Lapisan Gambar GIF Menjadi Gambar TIFF

Terkadang diperlukan untuk mengekstrak dan mengonversi lapisan Gambar PSD ke format gambar raster lain untuk memenuhi kebutuhan aplikasi. API Aspose.PSD mendukung fitur mengekstrak dan mengonversi lapisan Gambar PSD ke format gambar raster lain. Pertama, kita akan membuat sebuah instance gambar dan memuat gambar PSD dari disk lokal, kemudian kita akan mengulang setiap lapisan pada properti Layer. Selanjutnya kita akan mengonversi blok ke gambar TIFF. Potongan kode berikut menunjukkan bagaimana mengonversi lapisan gambar PSD menjadi gambar TIFF.

// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET
string sourceFile = dataDir + @"sample.psd";
string destName = dataDir + @"output";
// Load a PSD image and Convert the image's layers to Tiff images.
using (PsdImage image = (PsdImage)Image.Load(sourceFile))
{
// Iterate through array of PSD layers
for (int i = 0; i < image.Layers.Length; i++)
{
// Get PSD layer.
Layer layer = image.Layers[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.tif", objTiff);
}
}

Mengonversi PSD CMYK ke TIFF CMYK

Menggunakan Aspose.PSD untuk .NET, pengembang dapat mengonversi file PSD CMYK ke format tiff CMYK. Artikel ini menunjukkan bagaimana cara mengekspor/mengonversi file PSD CMYK ke format tiff CMYK dengan Aspose.PSD. Menggunakan Aspose.PSD untuk .NET, Anda dapat memuat gambar PSD dan kemudian Anda dapat mengatur berbagai properti menggunakan TiffOptions class dan menyimpan atau mengekspor gambar. Potongan kode berikut menunjukkan cara mencapai fitur ini.

// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET
string sourceFile = dataDir + @"sample.psd";
string destName = dataDir + @"output.tiff";
using (Image image = Image.Load(sourceFile))
{
image.Save(destName, new TiffOptions(TiffExpectedFormat.TiffLzwCmyk));
}

Mengekspor Gambar

Selain kumpulan rutinitas pemrosesan gambar, Aspose.PSD menyediakan kelas-kelas khusus untuk mengonversi format file PSD ke format lain. Dengan menggunakan perpustakaan ini, konversi gambar PSD sangat sederhana dan intuitif. Di bawah ini adalah beberapa kelas khusus untuk tujuan ini dalam ImageOptions namespace.

Mengekspor gambar PSD dengan Aspose.PSD untuk API .NET sangat mudah. Yang Anda butuhkan hanyalah objek kelas yang sesuai dari ImageOptions namespace. Dengan menggunakan kelas-kelas ini, Anda dapat dengan mudah mengekspor gambar apa pun yang dibuat, diedit, atau hanya dimuat dengan Aspose.PSD untuk .NET ke format yang didukung.

Menggabungkan Gambar

Contoh ini menggunakan kelas Graphics dan menunjukkan bagaimana menggabungkan dua atau lebih gambar menjadi satu gambar lengkap. Untuk mendemonstrasikan operasi, contoh ini membuat sebuah PsdImage baru dan menggambar gambar-gambar di permukaan kanvas menggunakan metode Draw Image yang terbuka oleh kelas Graphics. Dengan menggunakan kelas Grafis, dua atau lebih gambar dapat digabungkan sedemikian rupa sehingga gambar yang dihasilkan akan terlihat sebagai gambar lengkap tanpa adanya ruang di antara bagian gambar dan tidak ada halaman. Ukuran kanvas harus sama dengan ukuran gambar hasilnya. Berikut adalah contoh kode yang menunjukkan cara menggunakan DrawImage metode kelas Grafis untuk menggabungkan gambar dalam satu gambar.

// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET
// 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.Source = new FileCreateSource(dataDir + "Two_images_result_out.psd", false);
// Create an instance of Image and define canvas size
using (var image = Image.Create(imageOptions, 600, 600))
{
// Create and initialize an instance of Graphics, Clear the image surface with white color and Draw Image
var graphics = new Graphics(image);
graphics.Clear(Color.White);
graphics.DrawImage(Image.Load(dataDir + "example1.psd"), 0, 0, 300, 600);
graphics.DrawImage(Image.Load(dataDir + "example2.psd"), 300, 0, 300, 600);
image.Save();
}

Memperluas dan Mencrop Gambar

API Aspose.PSD memungkinkan Anda memperluas atau mencrop gambar selama proses konversi gambar. Pengembang perlu membuat persegi panjang dengan koordinat X dan Y dan menetapkan lebar dan tinggi dari kotak persegi panjang. X, Y dan Lebar, Tinggi dari persegi panjang akan menggambarkan perluasan atau pemotongan gambar yang dimuat. Jika diperlukan memperluas atau mencrop gambar selama konversi gambar, lakukan langkah-langkah berikut:

  1. Buat instance kelas RasterImage dan muat gambar yang ada.
  2. Buat Instance kelas ImageOption.
  3. Buat instance kelas Rectangle dan inisialisasi X, Y dan Lebar, Tinggi persegi panjang
  4. Panggil metode Simpan dari kelas RasterImage sambil melewati nama file output, opsi gambar, dan objek persegi panjang sebagai parameter.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET
string sourceFile = dataDir + @"example1.psd";
string destName = dataDir + @"jpeg_out.jpg";
// Load an image in an instance of Image and Setting for image data to be cashed
using (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 { X = -200, Y = -200, Width = 300, Height = 300 };
rasterImage.Save(destName, new JpegOptions(), destRect);
}

Membaca dan Menulis Data XMP ke Gambar

XMP (Ekstensible Metadata Platform) adalah standar ISO. XMP mensandardisasi model data, format serialisasi, dan properti inti untuk definisi dan pemrosesan metadata yang dapat diperluas. Ini juga memberikan panduan untuk menyematkan informasi XMP ke dalam gambar populer seperti JPEG, tanpa merusak daya baca mereka oleh aplikasi yang tidak mendukung XMP. Dengan menggunakan API Aspose.PSD untuk .NET, pengembang dapat membaca atau menulis metadata XMP ke gambar. Artikel ini menunjukkan bagaimana metadata XMP dapat dibaca dari sebuah gambar dan menulis metadata XMP ke gambar.

Buat Metadata XMP, Tulis Itu dan Baca Dari File

Dengan bantuan ruang nama Xmp, pengembang dapat membuat objek metadata XMP dan menuliskannya ke dalam gambar. Potongan kode berikut menunjukkan cara menggunakan paket-paket XmpHeaderPi, XmpTrailerPi, XmpMeta, XmpPacketWrapper, PhotoshopPackage dan DublinCorePackage yang terdapat dalam ruang nama Xmp.

// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET
// 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
using (var image = new PsdImage(rect.Width, rect.Height))
{
// Create an instance of XMP-Header
XmpHeaderPi xmpHeader = new XmpHeaderPi(Guid.NewGuid().ToString());
// Create an instance of Xmp-TrailerPi, XMPmeta class to set different attributes
XmpTrailerPi xmpTrailer = new XmpTrailerPi(true);
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);
photoshopPackage.SetCreatedDate(DateTime.UtcNow);
// 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("Mudassir Fayyaz");
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);
using (var ms = new MemoryStream())
{
// Update XMP metadata into image and Save image on the disk or in memory stream
image.XmpData = xmpData;
image.Save(ms);
image.Save(dataDir + "ee.psd");
ms.Seek(0, System.IO.SeekOrigin.Begin);
// Load the image from memory stream or from disk to read/get the metadata
using (var img = (PsdImage)Image.Load(ms))
{
// Getting the XMP metadata
XmpPacketWrapper imgXmpData = img.XmpData;
foreach (XmpPackage package in imgXmpData.Packages)
{
// Use package data ...
}
}
}
}

Mengekspor Gambar dalam Lingkungan Multithread

Aspose.PSD untuk .NET sekarang mendukung mengonversi gambar dalam lingkungan multi-threaded. Aspose.PSD untuk .NET memastikan kinerja yang dioptimalkan dari operasi selama eksekusi kode dalam lingkungan multi-threaded. Semua kelas opsi gambar (misalnya BmpOptions, TiffOptions, JpegOptions, dll.) dalam Aspose.PSD untuk .NET mengimplementasikan antarmuka IDisposable. Oleh karena itu, penting bagi pengembang untuk membuang objek kelas opsi gambar dengan benar jika properti Sumber diatur. Potongan kode berikut mendemonstrasikan fungsionalitas tersebut.

// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET
string imageDataPath = dataDir + @"sample.psd";
try
{
// Create the stream of the existing image file.
using (System.IO.FileStream fileStream = System.IO.File.Create(imageDataPath))
{
// Create an instance of PSD image option class.
using (PsdOptions psdOptions = new PsdOptions())
{
// Set the source property of the imaging option class object.
psdOptions.Source = new Sources.StreamSource(fileStream);
// DO PROCESSING.
// Following is the sample processing on the image. Un-comment to use it.
//using (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 file. This statement is in the final block because in any case this statement should execute to make it sure that resource is properly disposed off.
System.IO.File.Delete(imageDataPath);
}

Aspose.PSD sekarang mendukung properti SyncRoot saat bekerja dalam lingkungan multi-threaded. Pengembang dapat menggunakan properti ini untuk menyinkronkan akses ke aliran sumber. Potongan kode berikut menunjukkan bagaimana properti SyncRoot dapat digunakan.

// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET
// Create an instance of Memory stream class.
using (System.IO.MemoryStream memoryStream = new System.IO.MemoryStream())
{
// Create an instance of Stream container class and assign memory stream object.
using (StreamContainer streamContainer = new StreamContainer(memoryStream))
{
// check if the access to the stream source is synchronized.
lock (streamContainer.SyncRoot)
{
// do work
// now access to source MemoryStream is synchronized
}
}
}