Modyfikowanie obrazów TIFF

Dodaj ramki z różnymi ustawieniami

TIFF jest formatem bardzo elastycznym, który pozwala dodawać różne ramki o różnych wymiarach, kompresji i innych ustawieniach. Interfejsy API Aspose.PSD umożliwiają dodawanie dowolnej ramki TIFF o dowolnym rozmiarze, co pomaga w tworzeniu złożonych dokumentów. Jeśli istnieje wymaganie dostosowania ramek podczas procesu dodawania, aby stały się one równe, wykonaj następujące kroki:

  • Utwórz nową pustą ramkę z żądanymi opcjami lub skopiuj ramkę źródłową z określonymi opcjami wyjściowymi, korzystając z metody CreateFrameFrom.
  • Zmień rozmiar ramki/obrazu źródłowego na żądane wymiary za pomocą metody Resize.
  • Dodaj piksele ramki/obrazu źródłowego do nowej ramki.
  • Dodaj nową ramkę do obrazu TIFF wynikowego.

Eksportuj warstwy obrazu PSD do formatu pliku Multi-Page Tiff

Czasami konieczne jest wyeksportowanie warstw obrazu PSD do formatu pliku Multi-Page TIFF. Ten artykuł pokaże, jak można wykonać to zadanie za pomocą interfejsu API Aspose.PSD dla .NET. Na początku wczytamy obraz PSD z dysku. Następnie będziemy iterować po warstwach obrazu PSD i tworzyć TiffFrame z odpowiadających warstw. Na koniec zapiszemy rezultujący obraz Tiff w pojedynczym pliku na dysku.

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

Konfiguracja opcji TiffOptions

Programiści mogą dostosować różne właściwości klasy TiffOptions w celu uzyskania pożądanych wyników. W tym dokumencie skupimy się na 4 głównych właściwościach kontrolujących atrybuty obrazu wynikowego.

Poniżej wymienione są te właściwości.

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

Podczas inicjalizacji pustej struktury TiffOptions, każda opcja jest ustawiona na wartość domyślną, na przykład kompresja jest ustawiona jako Brak, BitsPerSample ustawiony jest na 1, a Photometric na MinIsWhite. Zapisanie w tym formacie spowoduje, że ostateczny obraz będzie czarno-biały, co jest oczekiwanym zachowaniem dla takiej kombinacji opcji. Aby uzyskać kolorowe rezultaty, należy ustawić wszystkie wyżej wymienione właściwości na wartości odpowiadające pożądanemu przestrzeni barwnej lub można zainicjalizować strukturę TiffOptions z ustawieniami predefiniowanymi, o których mowa później w tym artykule. Poniżej przedstawiona jest tabela opisująca oczekiwane wartości parametrów, które można ustawić, aby osiągnąć pożądane wyniki. Należy zauważyć, że wszystkie 4 kolumny powinny być ustawione za pomocą TiffOptions, aby zapisać dowolny obraz w formacie TIFF.

TiffOptions.Photometric TiffOptions.Compression TiffOptions.BitsPerSample TiffOptions.Predictor
Palette LZW/Nieskompresowany 1/4/8/16 (paleta, tryb koloru) tylko pojedynczy kanał Brak
MinIsWhite/MinIsBlack LZW/Nieskompresowany 1/4/8/16 (tryb odcieni szarości) tylko pojedynczy kanał Brak
Paleta LZW/Nieskompresowany 8 (paleta, tryb koloru) tylko pojedynczy kanał Poziomy (większa kompresja jest osiągana dla LZW tych samych wzorców)
MinIsWhite/MinIsBlack LZW/Nieskompresowany 8 (tryb odcieni szarości) tylko pojedynczy kanał Poziomy (większa kompresja jest osiągana dla LZW tych samych wzorców)
RGB LZW/Nieskompresowany [8,8,8] (3 kanały RGB) Brak/Poziomy
RGB LZW/Nieskompresowany [8,8,8,8] (3 kanały RGB i dodatkowy kanał alfa można ustawić za pomocą TiffOptions.AlphaStorage) W rzeczywistości obsługiwana jest dowolna liczba dodatkowych kanałów, ale każdy kanał musi mieć wielkość 8 bitów, np. [8,8,8,8,8,8] Brak/Poziomy
Wszystkie 4 właściwości powinny być ustawione za pomocą TiffOptions, aby zapisać obraz w dowolnym formacie w formacie Tiff. Przy wykorzystaniu różnych kombinacji niektóre przeglądarki (w tym przeglądarka zdjęć systemu Windows) mogą odmówić renderowania wynikowego obrazu ze względu na ograniczoną obsługę, którą oferują. W takim przypadku wybierz inną przeglądarkę do celów testowych.

Predefiniowane ustawienia dla klasy TiffOptions

Aby ułatwić użytkownikom i uniknąć błędów konfiguracji instancji TiffOptions, interfejs API Aspose.PSD dla .NET udostępnił inny konstruktor, który przyjmuje parametr typu TiffExpectedFormat. Na podstawie wybranej wartości z wyliczenia TiffExpectedFormat, interfejs API automatycznie konfiguruje wszystkie obowiązkowe właściwości dla instancji TiffOptions w celu uzyskania pożądanych wyników. Przed przejściem do przykładowego kodu oto lista pól TiffExpectedFormat i ich szczegółów dla lepszego zrozumienia użycia.

  • TiffExpectedFormat.Default: Ustawienie pola na Default zachowuje się podobnie do domyślnego konstruktora klasy TiffOptions bez ustawionej kompresji i BitsPerPixel ustawionego na 1 w celu uzyskania czarno-białego wyniku. Zaleca się korzystanie z tego pola, gdy inne właściwości związane z formatem mają być ustawione ręcznie zgodnie z pożądanymi wynikami.
  • TiffExpectedFormat.TiffCcitRle: Specyficzne dla kodowania RLE podczas zapisywania wyniku w formacie TIFF 1 BitsPerPixel (czarno-biały).
  • TiffExpectedFormat.TiffCcittFax3: Specyficzne dla kodowania CCITT Fax3 podczas zapisywania wyniku w formacie TIFF 1 BitsPerPixel (czarno-biały).
  • TiffExpectedFormat.TiffCcittFax4: Specyficzne dla kodowania CCITT Fax4 podczas zapisywania wyniku w formacie TIFF 1 BitsPerPixel (czarno-biały).
  • TiffExpectedFormat.TiffDeflateBW: Specyficzne dla kompresji Deflate podczas zapisywania wyniku w formacie TIFF 1 BitsPerPixel (czarno-biały).
  • TiffExpectedFormat.TiffDeflateRGB: Specyficzne dla kompresji Deflate podczas zapisywania wyniku w formacie TIFF RGB (kolor).
  • TiffExpectedFormat.TiffJpegRGB: Specyficzne dla kompresji Jpeg podczas zapisywania wyniku w formacie TIFF RGB (kolor).
  • TiffExpectedFormat.TiffJpegYCBCR: Specyficzne dla kompresji Deflate podczas zapisywania wyniku w formacie TIFF YCBCR (kolor).
  • TiffExpectedFormat.TiffLzwBW: Specyficzne dla kompresji LZW podczas zapisywania wyniku w formacie TIFF 1 BitsPerPixel (czarno-biały).
  • TiffExpectedFormat.TiffLzwRGB: Specyficzne dla kompresji LZW podczas zapisywania wyniku w formacie TIFF RGB (kolor).
  • TiffExpectedFormat.TiffLzwRGBA: Specyficzne dla kompresji LZW podczas zapisywania wyniku w formacie TIFF RGBA (kolor z przejrzystością).
  • TiffExpectedFormat.TiffNoCompressionBW: Specyficzne dla niekompresowanego formatu TIFF podczas zapisywania wyniku w formacie 1 BitsPerPixel (czarno-biały).
  • TiffExpectedFormat.TiffNoCompressionRGB: Specyficzne dla niekompresowanego formatu TIFF podczas zapisywania wyniku w formacie RGB (kolor).
  • TiffExpectedFormat.TiffNoCompressionRGBA: Specyficzne dla niekompresowanego formatu TIFF podczas zapisywania wyniku w formacie RGBA (kolor z przejrzystością).

Poniższy fragment kodu wyjaśnia użycie pól TiffExpectedFormat przy tworzeniu instancji klasy 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);
}

Obsługa kompresji Deflate i Adobe Deflate

Format pliku TIFF (Tagged Image File Format) obsługuje różne typy kompresji, podczas gdy typ kompresji jest przechowywany jako znacznik (wartość całkowita) w pliku. Jednym z takich metod kompresji jest Adobe Deflate (wcześniej znany jako Deflate). Interfejs API Aspose.PSD dla .NET obsługuje tę metodę kompresji do eksportu i tworzenia obrazów TIFF.

Zapis obrazu do formatu TIFF z kompresją Deflate

Konwersja wczytanych obrazów do formatu TIFF z kompresją Deflate/Adobe Deflate jest łatwa do wykonania.

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

Tworzenie obrazu TiffImage z kompresją Adobe Deflate

Poniższy przykład demonstruje użycie interfejsu API Aspose.PSD dla .NET do utworzenia obrazu od podstaw za pomocą metody kompresji 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);
}

Kompresowanie obrazów TIFF

Interfejs API Aspose.PSD dla .NET może być używany do konwersji obrazów PSD do formatu obrazu TIFF oraz zmiany kompresji rezultującego obrazu TIFF. API może być również użyte do przechowywania różnych obrazów jako ramek w obrazie TIFF do celów archiwizacyjnych, przy równoczesnym kompresowaniu obrazów do rozmiaru danych minimalnego. Kompresja obrazu powinna być przeprowadzana poprzez zmniejszenie rozmiaru danych źródłowych, niezależnie od użytego algorytmu kompresji. Aby uzyskać najlepsze współczynniki kompresji, możemy użyć przestrzeni kolorów indeksowanych. Poniższy fragment kodu wykonuje najlepszą kompresję przy użyciu 16 kolorów indeksowanych i algorytmu kompresji LZW, chociaż kolory źródłowe są nieznacznie rozmyte.

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