Modyfikowanie obrazów PNG

Określanie przezroczystości obrazów PNG

Jedną z zalet zapisywania obrazów w formacie PNG jest możliwość posiadania przezroczystego tła. Aspose.PSD dla języka Java udostępnia funkcję określania przezroczystości dla klas PngImage & RasterImage, jak pokazano w poniższym rozdziale. API Aspose.PSD dla języka Java można użyć do określenia przezroczystości przy tworzeniu nowych obrazów PNG lub konwertowaniu istniejących obrazów do formatu PNG. W tym celu API Aspose.PSD dla języka Java udostępnił właściwość TransparentColor oraz enumerację PngColorType, które można ustawić, aby określić kolor do renderowania jako przezroczysty na obrazie PNG. Poniższy fragment kodu demonstruje, jak przekonwertować istniejący obraz PSD na obraz PNG, korzystając z przeciążonego konstruktora PngImage i określając pożądany kolor jako przezroczysty.

String dataDir = Utils.getDataDir(SpecifyTransparency.class) + "ModifyingAndConvertingImages/";
try (PsdImage psdImage = (PsdImage) Image.load(dataDir + "sample.psd");
// Initialize PNG image with psd image pixel data.
PsdImage pngImage = new PsdImage(psdImage)) {
// specify the PNG image transparency options and save to file.
pngImage.setTransparentColor(Color.getWhite());
pngImage.setTransparentColor(true);
pngImage.save(dataDir + "Specify_Transparency_result.png");
}

Ustawianie rozdzielczości obrazów PNG

Aspose.PSD dla języka Java udostępnia klasę ResolutionSetting, która może być użyta do ustawienia rozdzielczości dla wszystkich formatów obrazów, w tym PNG. Ten artykuł demonstruje używanie API Aspose.PSD dla języka Java do ustawiania parametrów rozdzielczości poziomej i pionowej dla formatu obrazu PNG. Poniższy fragment kodu wczytuje istniejący obraz PSD i konwertuje go do formatu PNG, jednocześnie zmieniając rozdzielczość.

String dataDir = Utils.getDataDir(SettingResolution.class) + "ModifyingAndConvertingImages/";
try (PsdImage psdImage = (PsdImage) Image.load(dataDir + "sample.psd")) {
// Create an instance of PngOptions, Set the horizontal & vertical resolutions and Save the result on disc
PngOptions options = new PngOptions();
options.setResolutionSettings(new ResolutionSetting(72, 96));
psdImage.save(dataDir + "SettingResolution_output.png", options);
}

Kompresowanie plików PNG

Portable Network Graphic (PNG) to format kompresji bezstratnej do przesyłania map bitowych przez sieć. Gdy zapisujesz obraz jako plik PNG w dowolnym programie, możesz zostać poproszony o wybór poziomu kompresji z zakresu od 0 do maksymalnej wartości. Ustawienie tej wartości faktycznie kompresuje rozmiar pliku i nie zmniejsza jakości obrazu. W tym artykule opisano, jak API Aspose.PSD umożliwia kontrolowanie rozmiaru plików PNG. Można użyć API Aspose.PSD do ustawienia Poziomów Kompresji dla formatu pliku PNG, korzystając z klasy PngOptions, która posiada właściwość CompressionLevel typu int. Ta właściwość akceptuje wartość od 0 do 9, gdzie 9 oznacza maksymalną kompresję. Poniższy fragment kodu demonstruje, jak ustawić Poziomy Kompresji za pomocą API Aspose.PSD dla języka Java.

String dataDir = Utils.getDataDir(ApplyFilterMethod.class) + "ModifyingAndConvertingImages/";
try (PsdImage psdImage = (PsdImage) Image.load(dataDir + "sample.psd")) {
// Loop over possible CompressionLevel range
for (int i = 0; i <= 9; i++) {
// Create an instance of PngOptions for each resultant PNG, Set CompressionLevel and Save result on disk
PngOptions options = new PngOptions();
options.setCompressionLevel(i);
psdImage.save(dataDir + i + "_out.png", options);
}
}

Określanie głębokości bitowej obrazów PNG

Głębokość bitowa w technice obrazowania to liczba bitów użytych do wskazania koloru jednego piksela w obrazie bitmapowym. Podobnie jak we wszystkich innych formatach bitmapowych, głębokość koloru w PNG jest również wyrażana w bitach, takich jak 1-bit (2 kolory), 2-bit (4 kolory), 4-bit (16 kolorów) i 8-bit (256 kolorów). API Aspose.PSD dla języka Java może być użyte do ustawienia głębokości bitowej dla obrazów PNG, wykorzystując właściwość BitDepth udostępnioną przez klasę PngOptions. Obecnie właściwość BitDepth może być ustawiona na 1, 2, 4 lub 8 bitów dla odcieni szarości i kolorów indeksowanych. Dla wszystkich innych typów kolorów wspierane są tylko 8 bitów. Poniższy fragment kodu demonstruje, jak ustawić Głębokość Bitową dla obrazu PNG.

String dataDir = Utils.getDataDir(SpecifyBitDepth.class) + "ModifyingAndConvertingImages/";
try (PsdImage psdImage = (PsdImage) Image.load(dataDir + "sample.psd")) {
// Create an instance of PngOptions, Set the desired ColorType, BitDepth according to the specified ColorType and save image
PngOptions options = new PngOptions();
options.setColorType(PngColorType.Grayscale);
options.setBitDepth((byte) 1);
psdImage.save(dataDir + "SpecifyBitDepth_out.png", options);
}

Zastosowanie metod filtrów do obrazów PNG

Aspose.PSD dla języka Java udostępnia enumerację PngFilterType, która może być użyta do ustawienia typu filtra dla obrazu PNG. Poniższy fragment kodu demonstruje, jak zastosować filtr na istniejący plik PSD do obrazu PNG, korzystając z PngFilterType.

String dataDir = Utils.getDataDir(ApplyFilterMethod.class) + "ModifyingAndConvertingImages/";
try (PsdImage psdImage = (PsdImage) Image.load(dataDir + "sample.psd")) {
// Create an instance of PngOptions, Set the PNG filter method and Save changes to the disc
PngOptions options = new PngOptions();
options.setFilterType(PngFilterType.Paeth);
psdImage.save(dataDir + "ApplyFilterMethod_out.png", options);
}

Zmiana koloru tła obrazu PNG z przezroczystością

Obrazy w formacie PNG mogą mieć przezroczyste tło. Aspose.PSD dla języka Java dostarcza funkcję zmiany koloru tła obrazu PNG, który ma przezroczyste tło. API Aspose.PSD dla języka Java może być użyte do ustawienia/zmiany koloru przezroczystego obrazu PNG. Poniższy fragment kodu demonstruje, jak ustawić/zmienić kolor tła obrazu PNG z przezroczystym tłem.

String dataDir = Utils.getDataDir(ChangeBackgroundColor.class) + "ModifyingAndConvertingImages/";
try (PsdImage psdImage = (PsdImage) Image.load(dataDir + "sample.psd");
// Convert to PngImage based on PsdImage.
PsdImage pngImage = new PsdImage(psdImage)) {
int[] pixels = pngImage.loadArgb32Pixels(pngImage.getBounds());
// Iterate through the pixel array and Check the pixel information
//that if it is a transparent color pixel and Change the pixel color to white
int transparent = pngImage.getTransparentColor().toArgb();
int replacementColor = Color.getYellow().toArgb();
for (int i = 0; i < pixels.length; i++) {
if (pixels[i] == transparent) {
pixels[i] = replacementColor;
}
}
// Replace the pixel array into the image.
pngImage.saveArgb32Pixels(pngImage.getBounds(), pixels);
pngImage.save(dataDir + "ChangeBackground_out.png");
}