Modyfikowanie obrazów

Dyfuzja dla obrazów rastrowych

Dyfuzja to technika tworzenia iluzji nowych kolorów i odcieni poprzez zmienianie wzoru kropek, które faktycznie tworzą obraz. Jest to najczęstszy sposób zmniejszania zakresu kolorów obrazów do 256 (lub mniej) kolorów. Aspose.PSD zapewnia obsługę dyfuzji dla klasy RasterImage poprzez wprowadzenie metody Dither, która przyjmuje dwa parametry. Pierwszy to typ DitheringMethod, który ma dwie możliwe opcje: FloydSteinbergDithering i ThresholdDithering. Drugi parametr dla metody Dither to BitCount w postaci liczby całkowitej. BitCount określa rozmiar próbkowania dla wyniku dyfuzji. Wartość domyślna to 1, co oznacza czarno-biały kolor, a dozwolone wartości to 1, 4, 8, generujące palety zawierające odpowiednio 2, 4 i 256 kolorów.

String dataDir = Utils.getDataDir(DitheringforRasterImages.class) + "DrawingAndFormattingImages/";
String sourceFile = dataDir + "sample.psd";
String destName = dataDir + "SampleImage_out.bmp";
// Load an existing image into an instance of RasterImage class
try (PsdImage image = (PsdImage) Image.load(sourceFile)) {
// Peform Floyd Steinberg dithering on the current image and Save the resultant image
image.dither(DitheringMethod.ThresholdDithering, 4);
image.save(destName, new BmpOptions());
}

Dostosowywanie jasności, kontrastu i gammy

Korekty kolorów w obrazach cyfrowych to jedna z podstawowych funkcji, które oferują większość bibliotek przetwarzania obrazów. Korekty kolorów można podzielić na następujące kategorie:

  1. Jasność odnosi się do jasności lub ciemności koloru. Zwiększenie jasności obrazu rozjaśnia wszystkie kolory, podczas gdy zmniejszenie jasności ściemnia wszystkie kolory.
  2. Kontrast odnosi się do zwiększenia czytelności obiektów lub szczegółów w obrazie. Zwiększenie kontrastu obrazu zwiększa różnicę między obszarami jasnymi i ciemnymi, tak że obszary jasne stają się jaśniejsze, a ciemne obszary stają się ciemniejsze. Zmniejszenie kontrastu sprawi, że jaśniejsze i ciemniejsze obszary pozostaną mniej więcej takie same, ale ogólny obraz staje się bardziej jednolity.
  3. Gamma optymalizuje kontrast i jasność pośredniego oświetlenia, które oświetla obiekt na obrazie.

Dostosowywanie jasności

Aspose.PSD dla Java API dostarcza metodę AdjustBrightness dla klasy RasterImage, która może być używana do dostosowywania jasności obrazu, przekazując wartość całkowitą jako parametr. Najwyższa wartość parametru oznacza jaśniejszy obraz. Poniżej przedstawiono oryginalny obraz i obraz wynikowy do porównania.

String dataDir = Utils.getDataDir(AdjustingBrightness.class) + "DrawingAndFormattingImages/";
String sourceFile = dataDir + "sample.psd";
String destName = dataDir + "AdjustBrightness_out.tiff";
// Load an existing image into an instance of RasterImage class
try (Image image = Image.load(sourceFile);
// Cast object of Image to RasterImage
RasterImage rasterImage = (RasterImage) image) {
// Check if RasterImage is cached and Cache RasterImage for better performance
if (!rasterImage.isCached()) {
rasterImage.cacheData();
}
// Adjust the brightness
rasterImage.adjustBrightness(-50);
int[] ushort = {8, 8, 8};
// Create an instance of TiffOptions for the resultant image, Set various properties for the object of TiffOptions and Save the resultant image
TiffOptions tiffOptions = new TiffOptions(TiffExpectedFormat.Default);
tiffOptions.setBitsPerSample(ushort);
tiffOptions.setPhotometric(TiffPhotometrics.Rgb);
rasterImage.save(destName, tiffOptions);
}

Dostosowywanie kontrastu

Metoda AdjustContrast eksponowana przez klasę RasterImage może być użyta do dostosowania kontrastu obrazu, przekazując wartość zmiennoprzecinkową jako parametr.

Najwyższa wartość parametru oznacza wyższy kontrast na danym obrazie. Poniżej przedstawiono oryginalny obraz i obraz wynikowy do porównania.

String dataDir = Utils.getDataDir(AdjustingContrast.class) + "DrawingAndFormattingImages/";
String sourceFile = dataDir + "sample.psd";
String destName = dataDir + "AdjustContrast_out.tiff";
// Load an existing image into an instance of RasterImage class
try (Image image = Image.load(sourceFile);
// Cast object of Image to RasterImage
RasterImage rasterImage = (RasterImage) image) {
// Check if RasterImage is cached and Cache RasterImage for better performance
if (!rasterImage.isCached()) {
rasterImage.cacheData();
}
// Adjust the contrast
rasterImage.adjustContrast(50);
// Create an instance of TiffOptions for the resultant image, Set various properties for the object of TiffOptions and Save the resultant image to TIFF format
TiffOptions tiffOptions = new TiffOptions(TiffExpectedFormat.Default);
int[] ushort = {8, 8, 8};
tiffOptions.setBitsPerSample(ushort);
tiffOptions.setPhotometric(TiffPhotometrics.Rgb);
rasterImage.save(destName, tiffOptions);
}

Dostosowanie gammy

Metoda AdjustGamma eksponowana przez klasę RasterImage posiada dwie wersje. Jedna z nich przyjmuje jedną wartość zmiennoprzecinkową i wykonuje korekcję gammy dla współczynników czerwieni, niebieskiego i zielonego kanału. Natomiast druga wersja przyjmuje trzy wartości zmiennoprzecinkowe reprezentujące każdy współczynnik koloru osobno. Poniższy przykład pokazuje, jak zastosować dostosowanie gammy na obrazie.

String dataDir = Utils.getDataDir(AdjustingGamma.class) + "DrawingAndFormattingImages/";
String sourceFile = dataDir + "sample.psd";
String destName = dataDir + "AdjustGamma_out.tiff";
// Load an existing image into an instance of RasterImage class
try (Image image = Image.load(sourceFile);
// Cast object of Image to RasterImage
RasterImage rasterImage = (RasterImage) image) {
// Check if RasterImage is cached and Cache RasterImage for better performance
if (!rasterImage.isCached()) {
rasterImage.cacheData();
}
// Adjust the gamma
rasterImage.adjustGamma(2.2f, 2.2f, 2.2f);
// Create an instance of TiffOptions for the resultant image, Set various properties for the object of TiffOptions and Save the resultant image to TIFF format
TiffOptions tiffOptions = new TiffOptions(TiffExpectedFormat.Default);
int[] ushort = {8, 8, 8};
tiffOptions.setBitsPerSample(ushort);
tiffOptions.setPhotometric(TiffPhotometrics.Rgb);
rasterImage.save(destName, tiffOptions);
}

Rozmycie obrazu

Ten artykuł demonstruje użycie biblioteki Aspose.PSD dla Javy do wykonania efektu rozmycia na obrazie. Interfejsy API Aspose.PSD oferują wydajne i łatwe w użyciu metody do osiągnięcia tego celu. Aspose.PSD dla Javy udostępnia klasę GaussianBlurFilterOptions do tworzenia efektu rozmycia w locie. Klasa GaussianBlurFilterOptions wymaga wartości promienia i sigma do utworzenia efektu rozmycia na obrazie. Kroki do wykonania zmiany rozmiaru są proste:

  1. Wczytaj obraz za pomocą metody Load wystawionej przez klasę Image.
  2. Konwertuj obraz na RasterImage.
  3. Utwórz instancję klasy GaussianBlurFilterOptions za pomocą konstruktora domyślnego lub podaj wartości promienia i sigma w konstruktorze.
  4. Wywołaj metodę RasterImage.Filter, podając jako parametry prostokąt jako granice obrazu i instancję klasy GaussianBlurFilterOptions.
  5. Zapisz wyniki.

Poniższy przykład kodu pokazuje, jak utworzyć efekt rozmycia na obrazie.

String dataDir = Utils.getDataDir(BlurAnImage.class) + "DrawingAndFormattingImages/";
String sourceFile = dataDir + "sample.psd";
String destName = dataDir + "BlurAnImage_out.gif";
// Load an existing image into an instance of RasterImage class
try (Image image = Image.load(sourceFile)) {
// Convert the image into RasterImage,
//Pass Bounds[rectangle] of image and GaussianBlurFilterOptions instance to Filter method and Save the results
RasterImage rasterImage = (RasterImage) image;
rasterImage.filter(rasterImage.getBounds(), new GaussianBlurFilterOptions(15, 15));
rasterImage.save(destName, new GifOptions());
}

Sprawdź przejrzystość obrazu

Ten artykuł demonstruje użycie Aspose.PSD dla Javy do sprawdzenia przejrzystości obrazu. Kroki do sprawdzenia przejrzystości obrazu są proste:

  1. Wczytaj obraz za pomocą metody Load wystawionej przez klasę Image.
  2. Sprawdź przezroczystość obrazu - jeśli przezroczystość wynosi zero, obraz jest transparentny. Poniższy przykład kodu pokazuje, jak sprawdzić, czy obraz jest transparentny czy nie.
String dataDir = Utils.getDataDir(VerifyImageTransparency.class) + "DrawingAndFormattingImages/";
String sourceFile = dataDir + "sample.psd";
String destName = dataDir + "AdjustBrightness_out.tiff";
// Load an existing image into an instance of RasterImage class
try (PsdImage image = (PsdImage) Image.load(sourceFile)) {
float opacity = image.getImageOpacity();
System.out.println(opacity);
if (opacity == 0) {
// The image is fully transparent.
}
}

Wdrażanie kompresora plików GIF z utratą jakości

Za pomocą Aspose.PSD dla Javy programiści mogą ustawić różnicę pikseli. Kompresja GIF-a opiera się na “słowniku” łańcuchów pikseli widzianych. Normalny kodownik wyszukuje w słowniku najdłuższy łańcuch pikseli, który dokładnie pasuje do pikseli na obrazie. Koder stratny wybiera najdłuższy łańcuch pikseli, który jest wystarczająco “podobny” do pikseli na obrazie. Poniżej znajduje się przykładowy kod realizujący tę funkcjonalność.

String dataDir = Utils.getDataDir(ImplementLossyGIFCompressor.class) + "DrawingAndFormattingImages/";
String sourceFile = dataDir + "sample.psd";
String destName = dataDir + "anim_lossy-200.gif";
// Load an existing image into an instance of RasterImage class
try (Image image = Image.load(sourceFile)) {
GifOptions gifExport = new GifOptions();
gifExport.setMaxDiff(80);
image.save(dataDir + "anim_lossy-80.gif", gifExport);
gifExport.setMaxDiff(200);
image.save(destName, gifExport);
}

Wdrożenie interpolacji bicubicznej

Interpolacja oznacza zmianę wymiarów pikseli obrazu. Gdy obniżasz próbkowanie, eliminujesz piksele i tym samym usuwasz informacje i detale z obrazu. Gdy zwiększasz próbkowanie, dodajesz piksele. Photoshop dodaje te piksele, używając interpolacji. Ten artykuł demonstruje, jak można wykonać interpolację bicubiczną, korzystając z Aspose.PSD dla Javy.

Poniżej znajduje się przykładowy kod realizujący tę funkcjonalność.

String dataDir = Utils.getDataDir(ImplementBicubicResampler.class) + "DrawingAndFormattingImages/";
String filePath = dataDir + "sample_bicubic.psd";
String destNameCubicConvolution = dataDir + "ResamplerCubicConvolutionStripes_after.psd";
try (PsdImage image = (PsdImage) Image.load(filePath)) {
image.resize(300, 300, ResizeType.CubicConvolution);
image.save(destNameCubicConvolution, new PsdOptions(image));
String destNameBell = dataDir + "ResamplerBellStripes_after.psd";
}
try (PsdImage imageBellStripes = (PsdImage) Image.load(filePath)) {
imageBellStripes.resize(300, 300, ResizeType.Bell);
imageBellStripes.save(destNameCubicConvolution, new PsdOptions(imageBellStripes));
}

Warstwa dostosowania odwrócenia

Ten artykuł demonstruje, jak można wykonać warstwę dostosowania odwrócenia za pomocą Aspose.PSD dla Javy. Warstwa dostosowania to specjalny rodzaj warstwy, używany głównie do korekcji koloru. Zamiast mieć własną zawartość, dostosowuje informacje na warstwach poniżej niej. Warstwa dostosowania odwraca kolory obrazu, tworząc efekt negatywny.

Poniżej znajduje się przykładowy kod realizujący tę funkcjonalność.

String dataDir = Utils.getDataDir(InvertAdjustmentLayer.class) + "DrawingAndFormattingImages/";
String filePath = dataDir + "InvertStripes_before.psd";
String outputPath = dataDir + "InvertStripes_after.psd";
try (PsdImage im = (PsdImage) Image.load(filePath)) {
im.addInvertAdjustmentLayer();
im.save(outputPath);
}