Chuyển đổi Hình Ảnh

Chuyển Đổi Hình Ảnh Sang Trắng Đen và Nửa Màu

Đôi khi bạn có thể cần chuyển đổi hình ảnh màu sang trắng đen hoặc nửa màu để in ấn hoặc lưu trữ. Bài viết này thể hiện việc sử dụng Aspose.PSD cho API .NET để đạt được điều này bằng hai phương pháp như dưới đây.

  • Nhị phân
  • Màu xám

Nhị phân

Để hiểu về khái niệm Nhị phân, quan trọng là xác định Hình ảnh Nhị phân; đó là một hình ảnh kỹ thuật số chỉ có hai giá trị có thể cho mỗi pixel. Thông thường, hai màu sắc được sử dụng cho hình ảnh nhị phân là đen và trắng mặc dù bất kỳ hai màu nào cũng có thể được sử dụng. Nhị phân hóa là quá trình chuyển đổi hình ảnh thành mức nền nghĩa là mỗi pixel được lưu trữ như một bit đơn (0 hoặc 1) với 0 biểu thị sự vắng màu và 1 có nghĩa là sự hiện diện của màu sắc. Aspose.PSD cho API .NET hiện đang hỗ trợ hai phương pháp Nhị phân.

Nhị Phân với Ngưỡng Cố Định

Snippet mã dưới đây cho bạn thấy cách áp dụng nhị phân hóa với ngưỡng cố định cho một hình ảnh.

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

Nhị Phân với Ngưỡng Otsu

Snippet mã dưới đây cho bạn thấy cách áp dụng nhị phân hóa với ngưỡng Otsu cho một hình ảnh.

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

Màu Xám

Màu xám là quá trình chuyển đổi hình ảnh liên tục thành hình ảnh với các mảng màu xám không liên tục. Snippet mã dưới đây cho bạn thấy cách sử dụng Màu xám.

Chuyển Đổi Lớp Hình Ảnh GIF Sang Hình Ảnh TIFF

Đôi khi cần phải trích xuất và chuyển đổi các lớp của một Hình ảnh PSD sang định dạng hình ảnh raster khác để đáp ứng nhu cầu của ứng dụng. Aspose.PSD API hỗ trợ tính năng trích xuất và chuyển đổi các lớp của Hình ảnh PSD sang định dạng hình ảnh raster khác. Đầu tiên, chúng ta sẽ tạo một đối tượng hình ảnh và tải hình ảnh PSD từ ổ đĩa cục bộ, sau đó chúng ta sẽ lặp qua từng lớp trong thuộc tính Layer. Sau đó, chúng ta sẽ chuyển khối thành hình ảnh TIFF. Snippet mã dưới đây cho bạn thấy cách chuyển đổi các lớp hình ảnh PSD thành hình ảnh 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);
}
}

Chuyển Đổi PSD CMYK Sang TIFF CMYK

Sử dụng Aspose.PSD cho .NET, các nhà phát triển có thể chuyển đổi tệp CMYK PSD sang định dạng tiff CMYK. Bài viết này thể hiện cách xuất/chuyển đổi tệp CMYK PSD sang định dạng tiff CMYK với Aspose.PSD. Sử dụng Aspose.PSD cho .NET, bạn có thể tải hình ảnh PSD và sau đó bạn có thể thiết lập các thuộc tính khác nhau bằng cách sử dụng TiffOptions class và lưu hoặc xuất hình ảnh. Snippet mã dưới đây cho bạn thấy cách thực hiện tính năng này.

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

Xuất Hình Ảnh

Bên cạnh một bộ các rutin xử lý hình ảnh phong phú, Aspose.PSD cung cấp các lớp chuyên dụng để chuyển đổi định dạng tệp PSD sang các định dạng khác. Sử dụng thư viện này, việc chuyển đổi hình ảnh PSD rất đơn giản và trực quan. Dưới đây là một số lớp chuyên dụng cho mục đích này trong namespace ImageOptions.

Việc xuất hình ảnh PSD với Aspose.PSD cho API .NET rất dễ dàng. Bạn chỉ cần một đối tượng của lớp thích hợp từ namespace ImageOptions. Bằng cách sử dụng các lớp này, bạn có thể dễ dàng xuất bất kỳ hình ảnh nào được tạo, chỉnh sửa hoặc đơn giản chỉ được tải với Aspose.PSD cho .NET sang bất kỳ định dạng được hỗ trợ nào.

Kết Hợp Hình Ảnh

Ví dụ này sử dụng lớp Graphics và cho thấy cách kết hợp hai hoặc nhiều hình ảnh thành một hình ảnh hoàn chỉnh. Để thể hiện thao tác, ví dụ tạo một PsdImage mới và vẽ hình ảnh trên bề mặt canvas bằng cách sử dụng phương thức DrawImage được tiết lộ bởi lớp Graphics. Sử dụng lớp Graphics, hai hoặc nhiều hình ảnh có thể được kết hợp một cách sao cho hình ảnh kết quả sẽ trông giống như một hình ảnh hoàn chỉnh không có khoảng trống giữa các phần hình ảnh và không có trang nào. Kích thước bề mặt canvas phải bằng với kích thước của hình ảnh kết quả. Dưới đây là mã thảo luận cho thể hiện cách sử dụng DrawImage phương thức của lớp Graphics để kết hợp hình ảnh thành một hình ảnh duy nhất.

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

Mở Rộng và Cắt Hình Ảnh

Aspose.PSD API cho phép bạn mở rộng hoặc cắt hình ảnh trong quá trình chuyển đổi hình ảnh. Nhà phát triển cần tạo một hình chữ nhật với tọa độ X và Y và chỉ định chiều rộng và chiều cao của hộp hình chữ nhật. X, Y và chiều rộng, chiều cao của hình chữ nhật sẽ miêu tả việc mở rộng hoặc cắt hình ảnh đã tải. Nếu cần phải mở rộng hoặc cắt hình ảnh trong quá trình chuyển đổi hình ảnh, thực hiện các bước sau:

  1. Tạo một thể hiện của lớp RasterImage và tải hình ảnh hiện có.
  2. Tạo một thể hiện lớp ImageOption.
  3. Tạo một thể hiện của lớp Rectangle và khởi tạo X, Y và chiều rộng, chiều cao của hình chữ nhật.
  4. Gọi phương thức Save của lớp RasterImage trong khi truyền tên tệp đầu ra, tùy chọn hình ảnh và đối tượng hình chữ nhật làm tham số.
// 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);
}

Đọc và Viết Dữ Liệu XMP Cho Hình Ảnh

XMP (Extensible Metadata Platform) là một tiêu chuẩn ISO. XMP chuẩn hóa một mô hình dữ liệu, một định dạng serialization và các thuộc tính cốt lõi cho việc xác định và xử lý dữ liệu mở rộng. Nó cũng cung cấp hướng dẫn cho việc nhúng thông tin XMP vào một hình ảnh phổ biến như JPEG, mà không làm hỏng tính đọc bằng các ứng dụng không hỗ trợ XMP. Sử dụng Aspose.PSD cho API .NET, các nhà phát triển có thể đọc hoặc viết dữ liệu XMP vào hình ảnh. Bài viết này thể hiện cách dữ liệu XMP có thể được đọc từ một hình ảnh và viết dữ liệu XMP vào hình ảnh.

Tạo Dữ Liệu XMP, Viết Và Đọc Từ Tệp

Với sự trợ giúp của không gian tên Xmp, nhà phát triển có thể tạo đối tượng dữ liệu XMP metadata và viết nó vào một hình ảnh. Snippet mã dưới đây cho bạn thấy cách sử dụng XmpHeaderPi, XmpTrailerPi, XmpMeta, XmpPacketWrapper, PhotoshopPackage và DublinCorePackage chứa trong không gian tên 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 ...
}
}
}
}

Xuất Hình Ảnh Trong Môi Trường Đa Luồng

Aspose.PSD cho .NET bây giờ hỗ trợ chuyển đổi hình ảnh trong môi trường đa luồng. Aspose.PSD cho .NET đảm bảo hiệu suất tối ưu của các thao tác trong quá trình thực thi mã trong môi trường đa luồng. Tất cả các lớp tùy chọn hình ảnh (image option) (ví dụ: BmpOptions, TiffOptions, JpegOptions, v.v.) trong Aspose.PSD cho .NET thực thi giao diện IDisposable. Do đó, là bắt buộc phải người phát triển cần phải khử bộ nhớ đúng cách đối với đối tượng lớp tùy chọn hình ảnh nếu thuộc tính Source được thiết lập. Snippet mã dưới đây thể hiện chức năng này.

// 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 bây giờ hỗ trợ thuộc tính SyncRoot khi làm việc trong môi trường đa luồng. Nhà phát triển có thể sử dụng thuộc tính này để đồng bộ hóa truy cập vào luồng nguồn. Snippet mã dưới đây thể hiện cách sử dụng thuộc tính SyncRoot.

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