Конвертування Зображень

Конвертування Зображень у Чорно-Біле та Відтінки Сірого

Іноді вам може знадобитися конвертувати кольорові зображення у чорно-білі або відтінки сірого для друку або архівування. Ця стаття демонструє використання Aspose.PSD для API .NET для досягнення цього за допомогою двох наведених нижче методів.

  • Бінаризація
  • Відтінкування

Бінаризація

Для того, щоб зрозуміти концепцію бінаризації, важливо визначити Бінарне Зображення; це цифрове зображення, у якого кожен піксел може мати лише два можливих значення. Зазвичай для бінарного зображення використовуються чорний та білий кольори, хоча можна використовувати будь-які два кольори. Бінаризація - це процес перетворення зображення на дво-рівневе, що означає, що кожен піксель зберігається як один біт (0 або 1), де 0 позначає відсутність кольору, а 1 означає наявність кольору. API Aspose.PSD для .NET в даний момент підтримує два методи бінаризації.

Бінаризація з Фіксованим Порогом

Наступний уривок коду показує, як використовувати фіксовану порогову бінаризацію для застосування до зображення.

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

Бінаризація з Порогом Оцу

Наступний уривок коду показує, як застосовувати бінаризацію з порогом Оцу до зображення.

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

Відтінкування

Відтінкування - це процес перетворення зображення з неперервним відтінком на зображення з розривними відтінками сірого. Наступний уривок коду показує, як використовувати Відтінкування.

Конвертування Шарів Зображення GIF у Зображення TIFF

Іноді потрібно видобути та конвертувати шари зображення PSD в інший формат растрового зображення для відповіді на потреби додатка. API Aspose.PSD підтримує функцію видобування та конвертації шарів зображення PSD у інший формат растрового зображення. Спочатку ми створимо екземпляр зображення та завантажимо зображення PSD з локального диска, потім ми будемо перебирати кожен шар у властивості Шари. Потім ми конвертуємо блок в зображення TIFF. Наступний уривок коду показує, як конвертувати шари зображення PSD у зображення 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);
}
}

Конвертування CMYK PSD у CMYK TIFF

За допомогою Aspose.PSD для .NET розробники можуть конвертувати файл CMYK PSD у формат tiff CMYK. Ця стаття показує, як експортувати/конвертувати файл CMYK PSD у формат TIFF CMYK за допомогою Aspose.PSD. За допомогою Aspose.PSD для .NET ви можете завантажувати зображення PSD, потім ви можете встановлювати різні властивості за допомогою класу TiffOptions та зберігати або експортувати зображення. Наступний уривок коду показує, як досягти цієї функціональності.

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

Експорт Зображень

Разом з багатим набором процедур обробки зображень, Aspose.PSD надає спеціалізовані класи для конвертації форматів файлів PSD у інші формати. За допомогою цієї бібліотеки конвертація зображень PSD є дуже простою та інтуітивною. Нижче наведено деякі спеціалізовані класи для цієї мети в просторі імен ImageOptions.

Експортувати зображення PSD з Aspose.PSD для API .NET дуже просто. Вам потрібний лише об’єкт відповідного класу з ImageOptions namespace. Використовуючи ці класи, ви можете легко експортувати будь-яке зображення, створене, відредаговане або просто завантажене за допомогою Aspose.PSD для .NET у будь-який підтримуваний формат.

Об’єднання Зображень

У цьому прикладі використовується клас Graphics та показано, як об’єднати два або більше зображень в єдине повне зображення. Для демонстрації операції приклад створює нове зображення PsdImage та малює зображення на поверхні полотна за допомогою методу Draw Image, що викладений класом Graphics. За допомогою класу Graphics можна об’єднати два або більше зображень таким чином, щоб отримане зображення виглядало як ціле зображення без проміжку між частинами зображення та сторінками. Розмір полотна повинен дорівнювати розміру отриманого зображення. Нижче подано код, який демонструє, як використовувати метод DrawImage класу Graphics для об’єднання зображень в одне зображення.

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

Розширення та Обрізання Зображень

API Aspose.PSD дозволяє розширити або обрізати зображення під час процесу конвертації зображення. Розробник повинен створити прямокутник з координатами X та Y та вказати ширину та висоту прямокутника. Координати X, Y та ширина, висота прямокутника покажуть розширення або обрізання завантаженого зображення. Якщо під час конвертації зображення потрібно розширити або обрізати зображення, виконайте наступні кроки:

  1. Створіть екземпляр класу RasterImage та завантажте існуюче зображення.
  2. Створіть екземпляр класу ImageOption.
  3. Створіть екземпляр класу Rectangle та ініціалізуйте X, Y та ширину, висоту прямокутника
  4. Викличте метод Save класу RasterImage, передаючи ім’я вихідного файлу, параметри зображення та об’єкт прямокутника в якості параметрів.
// 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);
}

Читання та Запис Даних XMP в Зображення

XMP (Extensible Metadata Platform) - це стандарт ISO. XMP стандартизує модель даних, серіалізаційний формат та базові властивості для визначення та обробки розширених метаданих. Він також надає вказівки для вбудовування інформації XMP в популярне зображення, таке як JPEG, без порушення їх читабельності для додатків, які не підтримують XMP. За допомогою Aspose.PSD для .NET API розробники можуть читати або записувати метадані XMP в зображення. Ця стаття демонструє, як метадані XMP можна прочитати з зображення та записати метадані XMP в зображення.

Створення Метаданих XMP, Запис та Читання З Файлу

За допомогою простору імен Xmp розробник може створити об’єкт метаданих XMP та записати його в зображення. Вказаний уривок коду показує, як використовувати пакети XmpHeaderPi, XmpTrailerPi, XmpMeta, XmpPacketWrapper, PhotoshopPackage та DublinCorePackage, які включені в простір імен 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 ...
}
}
}
}

Експортування Зображень в Багатопотоковому Середовищі

Aspose.PSD для .NET тепер підтримує конвертацію зображень у багатопотоковому середовищі. Aspose.PSD для .NET забезпечує оптимізовану продуктивність операцій під час виконання коду в багатопотоковому середовищі. Всі класи параметрів зображення (наприклад, BmpOptions, TiffOptions, JpegOptions тощо) в Aspose.PSD для .NET реалізують інтерфейс IDisposable. Тому розробник повинен належним чином вивести клас параметрів зображення, якщо властивість джерела встановлена. Наступний уривок коду демонструє вказану функціональність.

// 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 тепер підтримує властивість Sync