Манипулиране на TIFF изображения

Добавяне на рамки с различни настройки

TIFF е много гъвкав формат, който позволява добавянето на различни рамки с различни размери, компресия и други настройки. API на Aspose.PSD ви позволява да добавяте всяка TIFF рамка с произволен размер, което помага за създаването на сложни документи. В случай на необходимост от настройка на рамките по време на добавянето им, за да ги направите равни, изпълнете следните стъпки:

  • Създайте нова празна рамка с желаните опции или копирайте изходната рамка със зададените опции за изход, използвайки метода CreateFrameFrom.
  • Преоразмерете изходната рамка/изображение до желаните размери, използвайки метода Resize.
  • Добавете пикселите на изходната рамка/изображение към новата рамка.
  • Добавете новата рамка към изходното TIFF изображение.

Изнасяне на слоевете на PSD изображението към файл във формат Multi Page Tiff

Понякога е необходимо да се изнесат слоевете на PSD изображението във файл във формат Multi-page TIFF. Тази статия ще демонстрира как можем да извършим тази задача чрез API на Aspose.PSD за .NET. Първо ще заредим PSD изображението от диск. След това ще преминем през слоевете на PSD изображението и ще създадем TiffFrame от съответните слоеве. Най-накрая ще запазим полученото Tiff изображение в един файл на диск.

// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET
// Load a PSD file as an image and cast it into PsdImage
using (PsdImage psdImage = (PsdImage)Image.Load(dataDir + "layers.psd"))
{
// Initialize tiff frame list.
//List<TiffFrame> frames = new List<TiffFrame>();
// Iterate over each layer of PsdImage and convert it to Tiff frame.
//foreach (var layer in psdImage.Layers)
//{
// TiffFrame frame = new TiffFrame(layer, new TiffOptions(FileFormats.Tiff.Enums.TiffExpectedFormat.TiffLzwCmyk));
// frames.Add(frame);
//}
// Create a new TiffImage with frames created earlier and save to disk.
//TiffImage tiffImage = new TiffImage(frames.ToArray());
//tiffImage.Save(dataDir + "ExportToMultiPageTiff_output.tif");
}

Конфигурация на TiffOptions

Програмистите могат да променят различни свойства на TiffOptions класа, за да получат желаните резултати. В този документ ще се фокусираме върху 4 основни свойства, които контролират атрибутите на полученото изображение.

Тези свойства са изброени по-долу.

  1. TiffOptions.Photometric
  2. TiffOptions.Compression
  3. TiffOptions.BitsPerSample
  4. TiffOptions.Predictor

При инициализирането на празната структура на TiffOptions, всяка опция се задава на стойността си по подразбиране, например компресията е зададена на None, BitsPerSample е зададен като 1, а Photometric като MinIsWhite. Запазването в този формат ще направи крайното изображение черно и бяло, което е очаквано поведение за такива комбинации от опции. За да получите цветните резултати, трябва да зададете всички горепосочени свойства на стойности, които съответстват на желания цветови пространство или да инициализирате структурата на TiffOptions с предварително зададени настройки, както е обсъдено по-късно в този документ. Предоставена по-долу е таблица, която описва очакваните стойности на параметрите, които можете да зададете, за да постигнете желаните резултати. Моля, обърнете внимание, че трябва да зададете всички 4 стълба чрез TiffOptions, за да запазите всяко заредено/създадено изображение във формат TIFF.

TiffOptions.Photometric TiffOptions.Compression TiffOptions.BitsPerSample TiffOptions.Predictor
Palette LZW/Uncompressed 1/4/8/16 (palette, color mode) single channel only None
MinIsWhite/MinIsBlack LZW/Uncompressed 1/4/8/16 (gray-scale mode) single channel only None
Palette LZW/Uncompressed 8 (palette, color mode) single channel only Horizontal (more compression achieved for LZW same patterns)
MinIsWhite/MinIsBlack LZW/Uncompressed 8 (gray-scale mode) single channel only Horizontal (more compression achieved for LZW same patterns)
RGB LZW/Uncompressed [8,8,8] (3 RGB channels) None/Horizontal
RGB LZW/Uncompressed [8,8,8,8] (3 RGB channels and additional alpha channel may be set through TiffOptions.AlphaStorage) Actually any additional channels count is supported but each channel must have 8 bit size like [8,8,8,8,8,8] None/Horizontal

Всички 4 свойства трябва да бъдат зададени чрез TiffOptions, за да се запази всяко изображение във формат TIFF. При използване на различни комбинации някои програми (включително Windows Photo Viewer) може да откажат да визуализират полученото изображение поради лимитираната поддръжка, която предлагат. В такъв случай, моля, използвайте различен програма за вашите тестове.

Предварително зададени настройки за класа TiffOptions

За да улесни потребителите и да се избегне грешна конфигурация на екземпляра на TiffOptions, API на Aspose.PSD за .NET е изложил друг конструктор, който приема параметър от тип TiffExpectedFormat. Въз основа на избраната стойност от изброяването TiffExpectedFormat, API автоматично конфигурира всички задължителни свойства за екземпляра на TiffOptions с цел производството на желаните резултати. Преди да преминем към примерния код, ето списък на полетата на TiffExpectedFormat и техните детайли за по-добро разбиране на употребата.

  • TiffExpectedFormat.Default: Задаването на полето като Default действа подобно на конструктора по подразбиране на класа TiffOptions без компресия и BitsPerPixel зададени на 1, за да се получи черно и бяло изображение. Съветва се да се използва това поле, когато други специфични за формата свойства трябва да бъдат зададени ръчно в съответствие с желаните резултати.
  • TiffExpectedFormat.TiffCcitRle: Специфично за кодирането чрез RLE при запазване на резултата в TIFF формат с BitsPerPixel зададен на 1 (черно и бяло изображение).
  • TiffExpectedFormat.TiffCcittFax3: Специфично за кодирането с CCITT Fax3 при запазване на резултата в TIFF формат с BitsPerPixel зададен на 1 (черно и бяло изображение).
  • TiffExpectedFormat.TiffCcittFax4: Специфично за кодирането с CCITT Fax4 при запазване на резултата в TIFF формат с BitsPerPixel зададен на 1 (черно и бяло изображение).
  • TiffExpectedFormat.TiffDeflateBW: Специфично за компресията с Deflate при запазване на резултата в TIFF формат с BitsPerPixel зададен на 1 (черно и бяло изображение).
  • TiffExpectedFormat.TiffDeflateRGB: Специфично за компресията с Deflate при запазване на резултата в RGB (цветно) TIFF формат.
  • TiffExpectedFormat.TiffJpegRGB: Специфично за компресията с JPEG при запазване на резултата в RGB (цветно) TIFF формат.
  • TiffExpectedFormat.TiffJpegYCBCR: Специфично за компресията с JPEG при запазване на резултата в YCBCR (цветно) TIFF формат.
  • TiffExpectedFormat.TiffLzwBW: Специфично за компресията с LZW при запазване на резултата в TIFF формат с BitsPerPixel зададен на 1 (черно и бяло изображение).
  • TiffExpectedFormat.TiffLzwRGB: Специфично за компресията с LZW при запазване на резултата в RGB (цветно) TIFF формат.
  • TiffExpectedFormat.TiffLzwRGBA: Специфично за компресията с LZW при запазване на резултата в RGBA (цветно с прозрачност) TIFF формат.
  • TiffExpectedFormat.TiffNoCompressionBW: Специфично за некомпресиран формат TIFF при запазване на резултата с BitsPerPixel зададен на 1 (черно и бяло).
  • TiffExpectedFormat.TiffNoCompressionRGB: Специфично за некомпресиран формат TIFF при запазване на резултата в RGB (цветно).
  • TiffExpectedFormat.TiffNoCompressionRGBA: Специфично за некомпресиран формат TIFF при запазване на резултата в RGBA (цветно с прозрачност).

Долу предоставеният код демонстрира употребата на полетата на TiffExpectedFormat при създаването на инстанция на класа TiffOptions.

// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET
// Load a PSD file as an image and cast it into PsdImage
using (PsdImage psdImage = (PsdImage)Image.Load(dataDir + "layers.psd"))
{
// Create an instance of TiffOptions while specifying desired format Passsing TiffExpectedFormat.TiffJpegRGB will set the compression to Jpeg and BitsPerPixel according to the RGB color space.
TiffOptions options = new TiffOptions(TiffExpectedFormat.TiffJpegRgb);
psdImage.Save(dataDir + "SampleTiff_out.tiff", options);
}

Поддръжка за Deflate и Adobe Deflate компресия

Форматът на файловете TIFF (Tagged Image File Format) поддържа различни видове компресия, като типът на компресията се съхранява като таг (цяло число) във файла. Един от такива методи за компресия е Adobe Deflate (преди известен като Deflate). API на Aspose.PSD за .NET поддържа този метод на компресия за експортиране & създаване на TIFF изображения.

Запазване на изображение в TIFF с Deflate компресия

Конвертирането на заредените изображения в TIFF с Deflate/Adobe Deflate компресия е лесно като следва.

// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET
// Load a PSD file as an image and cast it into PsdImage
using (PsdImage psdImage = (PsdImage)Image.Load(dataDir + "layers.psd"))
{
// Create an instance of TiffOptions while specifying desired format and compression
TiffOptions options = new TiffOptions(TiffExpectedFormat.TiffDeflateRgb);
options.Compression = TiffCompressions.AdobeDeflate;
psdImage.Save(dataDir + "TIFFwithDeflateCompression_out.tiff", options);
}

Създаване на TiffImage с Adobe Deflate компресия

Предоставеният по-долу пример демонстрира използването на API на Aspose.PSD за .NET за създаване на изображение от нулата, използвайки метода на Adobe Deflate компресия.

// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET
// Create an instance of TiffOptions and set its various properties
TiffOptions options = new TiffOptions(TiffExpectedFormat.Default);
options.BitsPerSample = new ushort[] { 8, 8, 8 };
options.Photometric = TiffPhotometrics.Rgb;
options.Xresolution = new TiffRational(72);
options.Yresolution = new TiffRational(72);
options.ResolutionUnit = TiffResolutionUnits.Inch;
options.PlanarConfiguration = TiffPlanarConfigs.Contiguous;
// Set the Compression to AdobeDeflate
options.Compression = TiffCompressions.AdobeDeflate;
//Create a new image with specific size and TiffOptions settings
using (PsdImage image = new PsdImage(100, 100))
{
// Fill image data.
int count = image.Width * image.Height;
int[] pixels = new int[count];
for (int i = 0; i < count; i++)
{
pixels[i] = Color.Red.ToArgb();
}
// Save the newly created pixels.
image.SaveArgb32Pixels(image.Bounds, pixels);
// Save resultant image
image.Save(dataDir + "TIFFwithAdobeDeflateCompression_output.tif", options);
}

Компресиране на TIFF изображения

API на Aspose.PSD за .NET може да се използва за преобразуване на PSD изображения в формат на изображения TIFF и дори за промяна на компресията на полученото TIFF изображение. API-то също може да се използва за запазване на различни изображения като рамки в TIFF изображение за архивни цели, като компресира изображенията до най-малкия размер на данните. Компресията на изображението във всеки случай трябва да се извършва чрез намаляване на размера на източните данни, независимо от използвания компресиращ алгоритъм. За постигане на най-добро съотношение на компресия можем да използваме индексирани цветови пространства. Предоставеният по-долу код осигурява най-добрата компресия, използвайки само 16 индексирани цветове и алгоритъм за компресия LZW, но с източниците на цветове, които са лека шумни.

// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET
// Load a PSD file as an image and cast it into PsdImage
using (PsdImage psdImage = (PsdImage)Image.Load(dataDir + "layers.psd"))
{
// Create an instance of TiffOptions for the resultant image
TiffOptions outputSettings = new TiffOptions(TiffExpectedFormat.Default);
// Set BitsPerSample, Compression, Photometric mode and graycale palette
outputSettings.BitsPerSample = new ushort[] { 4 };
outputSettings.Compression = TiffCompressions.Lzw;
outputSettings.Photometric = TiffPhotometrics.Palette;
outputSettings.Palette = ColorPaletteHelper.Create4BitGrayscale(true);
psdImage.Save(dataDir + "SampleTiff_out.tiff", outputSettings);
}