Конвертування Зображень
Конвертування Зображень у Чорно-Біле та Відтінки Сірого
Іноді вам може знадобитися конвертувати кольорові зображення у чорно-білі або відтінки сірого для друку або архівування. Ця стаття демонструє використання 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 та ширина, висота прямокутника покажуть розширення або обрізання завантаженого зображення. Якщо під час конвертації зображення потрібно розширити або обрізати зображення, виконайте наступні кроки:
- Створіть екземпляр класу RasterImage та завантажте існуюче зображення.
- Створіть екземпляр класу ImageOption.
- Створіть екземпляр класу Rectangle та ініціалізуйте X, Y та ширину, висоту прямокутника
- Викличте метод 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