Manipulace s PNG obrázky

Specifikace průhlednosti pro PNG obrázky

Jednou z výhod ukládání obrázků ve formátu PNG je možnost mít průhledné pozadí. Aspose.PSD pro Jav využívá funkci pro specifikaci průhlednosti pro třídy PngImage & RasterImage, jak je ukázáno v následující sekci. API Aspose.PSD pro Jav může být použito k nastavení libovolné barvy jako průhledné při vytváření nových PNG obrázků nebo převádění existujících obrázků do formátu PNG. Pro tyto účely API Aspose.PSD pro Jav poskytuje vlastnost TransparentColor a výčet PngColorType, který lze nastavit pro specifikaci jakékoliv barvy, která bude vykreslena jako průhledná v PNG obrázku. Následující kódový úryvek ukazuje, jak převést existující obrázek PSD na obrázek PNG pomocí přetíženého konstruktoru PngImage a specifikovat požadovanou barvu jako průhlednou.

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

Nastavení rozlišení pro PNG obrázky

Aspose.PSD pro Jav poskytuje třídu ResolutionSetting, která může být použita k nastavení rozlišení pro všechny formáty obrázků včetně PNG. Tento článek demonstruje použití API Aspose.PSD pro Jav k nastavení parametrů horizontálního a vertikálního rozlišení pro formát obrázku PNG. Následující kódový úryvek načítá existující obrázek PSD a konvertuje jej do formátu PNG, změňuje také rozlišení.

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

Komprimace souborů PNG

Formát Portable Network Graphic (PNG) je ztrátově komprimovaný formát pro přenos bitmapy po sítích. Když uložíte obrázek jako soubor PNG v jakémkoli programu, může se vás požádat, abyste vybrali úroveň komprese v rozmezí od 0 do jakékoli maximální úrovně. Nastavení této hodnoty ve skutečnosti komprimuje velikost souboru a doopravdy neovlivňuje kvalitu obrázku. Tento článek popisuje, jak API Aspose.PSD umožňuje kontrolovat velikost souboru PNG. API Aspose.PSD může být použito k nastavení kompresní úrovně pro formát souboru PNG pomocí třídy PngOptions, která má vlastnost CompressionLevel typu int. Tato vlastnost přijímá hodnotu od 0 do 9, kde 9 je maximální komprese. Následující kódový úryvek ukazuje, jak nastavit kompresní úrovně pomocí API Aspose.PSD pro Jav.

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

Specifikace barevné hloubky pro PNG obrázky

Barevná hloubka v obrazové technice je počet bitů použitých k indikaci barvy jednoho pixelu v mapě bitů. Stejně jako u všech ostatních bitmapových formátů je barva PNG také vyjádřena v bitech, například 1 bit (2 barvy), 2 bity (4 barvy), 4 bity (16 barev) a 8 bitů (256 barev). API Aspose.PSD pro Jav může být použito k nastavení barevné hloubky pro PNG obrázky pomocí vlastnosti BitDepth, kterou má třída PngOptions. V současné době lze vlastnost BitDepth nastavit na 1, 2, 4 nebo 8 bitů pro stupně šedi a indexované barevné typy. Pro všechny ostatní typy barev jsou podporovány pouze 8 bitů. Následující kódový úryvek ukazuje, jak nastavit barevnou hloubku pro PNG obrázek.

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

Použití metody filtru na obrázky PNG

Aspose.PSD pro Jav poskytuje výčet PngFilterType, který může být použit k nastavení typu filtru pro obrázek PNG. Následující kódový úryvek ukazuje, jak aplikovat filtr na existující soubor PSD na obrázek PNG pomocí 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);
}

Změna barvy pozadí průhledného obrázku PNG

Obrázky ve formátu PNG mohou mít průhledné pozadí. Aspose.PSD pro Jav poskytuje možnost změnit barvu pozadí pro PNG obrázek s průhledným pozadím. API Aspose.PSD pro Jav může být použito k nastavení/změně barvy průhledného PNG obrázku. Následující kódový úryvek ukazuje, jak nastavit/změnit barvu pozadí průhledného PNG obrázku.

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