Skip to content

Instantly share code, notes, and snippets.

@cccZone
Forked from aspose-com-gists/compress-apng.java
Last active December 31, 2024 05:42
Show Gist options
  • Save cccZone/1c0a488ce97774b955e1b7724d919679 to your computer and use it in GitHub Desktop.
Save cccZone/1c0a488ce97774b955e1b7724d919679 to your computer and use it in GitHub Desktop.
aspose 图片操作示例

Aspose.Imaging Java API allows to easy compress your images or photos in your Java application or Web service.

You can:

  • compress raster image with various options;
  • compress vector images;
  • tune compressing parameters to fit your requests.

Interested ?

You may go further at : https://products.aspose.com/imaging/java/

import com.aspose.imaging.ColorPaletteHelper;
import com.aspose.imaging.Image;
import com.aspose.imaging.RasterImage;
import com.aspose.imaging.fileformats.png.PngColorType;
import com.aspose.imaging.imageoptions.ApngOptions;
String templatesFolder = "C:\\WorkDir\\";
String inputFile = templatesFolder + "template.apng";
String outputFile = templatesFolder + "compressed_apng.apng";
try (Image image = Image.load(inputFile))
{
ApngOptions options = new ApngOptions();
options.setCompressionLevel(9);
options.setProgressive(true);
options.setColorType(PngColorType.IndexedColor);
options.setPalette(ColorPaletteHelper.getCloseImagePalette((RasterImage) image, 1 << 8));
image.save(outputFile, options);
}
import com.aspose.imaging.ColorPaletteHelper;
import com.aspose.imaging.Image;
import com.aspose.imaging.RasterImage;
import com.aspose.imaging.fileformats.bmp.BitmapCompression;
import com.aspose.imaging.imageoptions.BmpOptions;
import java.util.Arrays;
import java.util.List;
compressBmp();
// utility class
static class Tuple<T1, T2>
{
public T1 item1;
public T2 item2;
public Tuple(T1 item1, T2 item2)
{
this.item1 = item1;
this.item2 = item2;
}
}
public static void compressBmp()
{
String templatesFolder = "C:\\WorkDir\\";
//List of available bmp compressions
List<Tuple<Long, Integer>> compressions = Arrays.asList(
new Tuple<Long, Integer>(BitmapCompression.Rgb, 1),
new Tuple<Long, Integer>(BitmapCompression.Rgb, 4),
new Tuple<Long, Integer>(BitmapCompression.Rgb, 8),
new Tuple<Long, Integer>(BitmapCompression.Rle8, 8),
new Tuple<Long, Integer>(BitmapCompression.Rle4, 4)
);
String inputFile = templatesFolder + "template.bmp";
for (Tuple<Long, Integer> compression : compressions)
{
int bits = compression.item2;
long compressionType = compression.item1;
String outputFile = templatesFolder + "compressed_" +
BitmapCompression.toString(BitmapCompression.class, compressionType) +
"_" + bits + "bits.bmp";
try (Image image = Image.load(inputFile))
{
BmpOptions option = new BmpOptions();
option.setCompression(compressionType);
option.setBitsPerPixel(bits);
option.setPalette(ColorPaletteHelper.getCloseImagePalette((RasterImage) image, 1 << bits));
image.save(outputFile, option);
}
}
}
import com.aspose.imaging.Image;
import com.aspose.imaging.fileformats.dicom.ColorType;
import com.aspose.imaging.fileformats.dicom.Compression;
import com.aspose.imaging.fileformats.dicom.CompressionType;
import com.aspose.imaging.imageoptions.DicomOptions;
import com.aspose.imaging.imageoptions.JpegOptions;
String templatesFolder = "C:\\WorkDir\\";
String inputFile = templatesFolder + "template.dicom";
String outputFile = templatesFolder + "compressed.dicom";
try (Image image = Image.load(inputFile))
{
DicomOptions options = new DicomOptions();
options.setColorType(ColorType.Grayscale8Bit); // or ColorType.Rgb24Bit for truecolor images
Compression compression = new Compression();
compression.setType(CompressionType.Jpeg);
compression.setJpeg(new JpegOptions()
{{
setQuality(75);
}});
options.setCompression(compression);
image.save(outputFile, options);
}
import com.aspose.imaging.Image;
import com.aspose.imaging.imageoptions.EmfOptions;
String templatesFolder = "C:\\WorkDir\\";
String inputFile = templatesFolder + "template.emf";
String outputFile = templatesFolder + "compressed.emz";
try (Image image = Image.load(inputFile))
{
EmfOptions options = new EmfOptions();
options.setCompress(true);
image.save(outputFile, options);
}
import com.aspose.imaging.ColorPaletteHelper;
import com.aspose.imaging.Image;
import com.aspose.imaging.RasterImage;
import com.aspose.imaging.imageoptions.GifOptions;
String templatesFolder = "C:\\WorkDir\\";
String inputFile = templatesFolder + "template.gif";
String outputFile = templatesFolder + "compressed_gif.gif";
try (Image image = Image.load(inputFile))
{
GifOptions options = new GifOptions();
options.setPaletteSorted(false);
options.setDoPaletteCorrection(false);
options.setMaxDiff(500);
options.setColorResolution((byte) 7);
options.setPalette(ColorPaletteHelper.getCloseImagePalette((RasterImage) image, 1 << 8));
image.save(outputFile, options);
}
import com.aspose.imaging.ColorPaletteHelper;
import com.aspose.imaging.FileFormat;
import com.aspose.imaging.Image;
import com.aspose.imaging.RasterImage;
import com.aspose.imaging.fileformats.ico.IcoImage;
import com.aspose.imaging.imageoptions.IcoOptions;
import java.io.File;
import java.util.stream.Stream;
String dataDir = "c:\\Users\\USER\\Downloads\\templates\\";
// Load an ICO image.
try (IcoImage image = (IcoImage) Image.load(dataDir + "template.ico"))
{
// Save output to disc according to save options that will compress each ICO frame as a PNG image
image.save(dataDir + "result.ico", new IcoOptions(FileFormat.Png, 32));
// or you can apply low-bit BMP options.
IcoOptions options = new IcoOptions(FileFormat.Bmp, 8);
// 1, 4 and 8 bit images require a color palette. The highest quality ICO page will be used to create it.
Image page = Stream.of(image.getPages()).max((o1, o2) -> {
long val1 = (long) o1.getWidth() * o1.getHeight() * 100L + o1.getBitsPerPixel();
long val2 = (long) o2.getWidth() * o2.getHeight() * 100L + o2.getBitsPerPixel();
return (int) (val2 - val1);
}).get();
// Create the color palette.
options.setPalette(ColorPaletteHelper.getCloseImagePalette((RasterImage) page, 1 << options.getBitsPerPixel()));
// Save output to disc according to save options that will compress each ICO frame as an 8-bit BMP image.
image.save(dataDir + "result2.ico", options);
// save output to disc
image.save(dataDir + "result.ico");
}
new File(dataDir + "result.ico").delete();
new File(dataDir + "result2.ico").delete();
import com.aspose.imaging.Image;
import com.aspose.imaging.fileformats.jpeg2000.Jpeg2000Codec;
import com.aspose.imaging.imageoptions.Jpeg2000Options;
String templatesFolder = "C:\\WorkDir\\";
String inputFile = templatesFolder + "template.j2k";
String outputFile = templatesFolder + "compressed_j2k.j2k";
try (Image image = Image.load(inputFile))
{
Jpeg2000Options options = new Jpeg2000Options();
options.setCodec(Jpeg2000Codec.J2K);
options.setIrreversible(false);
options.setCompressionRatios(new int[]{100});
image.save(outputFile, options);
}
import com.aspose.imaging.Image;
import com.aspose.imaging.fileformats.jpeg2000.Jpeg2000Codec;
import com.aspose.imaging.imageoptions.Jpeg2000Options;
String templatesFolder = "C:\\WorkDir\\";
String inputFile = templatesFolder + "template.jp2";
String outputFile = templatesFolder + "compressed_jp2.jp2";
try (Image image = Image.load(inputFile))
{
Jpeg2000Options options = new Jpeg2000Options();
options.setCodec(Jpeg2000Codec.Jp2);
options.setIrreversible(false);
options.setCompressionRatios(new int[]{100});
image.save(outputFile, options);
}
import com.aspose.imaging.Image;
import com.aspose.imaging.fileformats.jpeg.JpegCompressionColorMode;
import com.aspose.imaging.fileformats.jpeg.JpegCompressionMode;
import com.aspose.imaging.imageoptions.JpegOptions;
String templatesFolder = "C:\\WorkDir\\";
String inputFile = templatesFolder + "template.jpg";
String outputFile = templatesFolder + "compressed_jpg.jpg";
try (Image image = Image.load(inputFile))
{
JpegOptions options = new JpegOptions();
options.setCompressionType(JpegCompressionMode.Progressive);
options.setColorType(JpegCompressionColorMode.YCbCr);
options.setQuality(75);
image.save(outputFile, options);
}
import com.aspose.imaging.Image;
import com.aspose.imaging.fileformats.tiff.enums.TiffCompressions;
import com.aspose.imaging.fileformats.tiff.enums.TiffExpectedFormat;
import com.aspose.imaging.fileformats.tiff.enums.TiffPhotometrics;
import com.aspose.imaging.imageoptions.TiffOptions;
import java.util.Arrays;
import java.util.List;
String templatesFolder = "C:\\WorkDir\\";
List<String> fileFormats = Arrays.asList("djvu", "dng");
fileFormats.forEach(
formatExt ->
{
String inputFile = templatesFolder + "template." + formatExt;
String outputFile = templatesFolder + "compressed_" + formatExt + ".tiff";
try (Image image = Image.load(inputFile))
{
TiffOptions options = new TiffOptions(TiffExpectedFormat.Default);
options.setPhotometric(TiffPhotometrics.Ycbcr);
options.setCompression(TiffCompressions.Jpeg);
options.setBitsPerSample(new int[]{8, 8, 8});
image.save(outputFile, options);
}
});
import com.aspose.imaging.ColorPaletteHelper;
import com.aspose.imaging.Image;
import com.aspose.imaging.RasterImage;
import com.aspose.imaging.fileformats.png.PngColorType;
import com.aspose.imaging.imageoptions.PngOptions;
import java.util.Arrays;
import java.util.List;
String templatesFolder = "C:\\WorkDir\\";
List<String> fileFormats = Arrays.asList("tga");
fileFormats.forEach(
formatExt ->
{
String inputFile = templatesFolder + "template." + formatExt;
String outputFile = templatesFolder + "compressed_" + formatExt + ".png";
try (Image image = Image.load(inputFile))
{
PngOptions options = new PngOptions();
options.setCompressionLevel(9);
options.setProgressive(true);
options.setColorType(PngColorType.IndexedColor);
options.setPalette(ColorPaletteHelper.getCloseImagePalette((RasterImage) image, 1 << 5));
image.save(outputFile, options);
}
});
import com.aspose.imaging.ColorPaletteHelper;
import com.aspose.imaging.Image;
import com.aspose.imaging.RasterImage;
import com.aspose.imaging.fileformats.png.PngColorType;
import com.aspose.imaging.imageoptions.PngOptions;
String templatesFolder = "C:\\WorkDir\\";
String inputFile = templatesFolder + "template.png";
String outputFile = templatesFolder + "compressed_png.png";
try (Image image = Image.load(inputFile))
{
PngOptions options = new PngOptions();
options.setCompressionLevel(9);
options.setProgressive(true);
options.setColorType(PngColorType.IndexedColor);
options.setPalette(ColorPaletteHelper.getCloseImagePalette((RasterImage) image, 1 << 5));
image.save(outputFile, options);
}
import com.aspose.imaging.ColorPaletteHelper;
import com.aspose.imaging.Image;
import com.aspose.imaging.RasterImage;
import com.aspose.imaging.fileformats.psd.ColorModes;
import com.aspose.imaging.fileformats.psd.CompressionMethod;
import com.aspose.imaging.imageoptions.PsdOptions;
String templatesFolder = "C:\\WorkDir\\";
String inputFile = templatesFolder + "template.bmp";
String outputFile = templatesFolder + "compressed_psd.psd";
try (Image image = Image.load(inputFile))
{
PsdOptions options = new PsdOptions();
options.setCompressionMethod(CompressionMethod.RLE);
options.setColorMode(ColorModes.Indexed);
options.setChannelsCount((short) 1);
options.setChannelBitsCount((short) 8);
options.setPalette(ColorPaletteHelper.getCloseImagePalette((RasterImage) image, 1 << 8));
image.save(outputFile, options);
}
import com.aspose.imaging.Image;
import com.aspose.imaging.imageoptions.SvgOptions;
String templatesFolder = "C:\\WorkDir\\";
String inputFile = templatesFolder + "template.svg";
String outputFile = templatesFolder + "compressed.svgz";
try (Image image = Image.load(inputFile))
{
SvgOptions options = new SvgOptions();
options.setCompress(true);
image.save(outputFile, options);
}
import com.aspose.imaging.Image;
import com.aspose.imaging.fileformats.tiff.enums.TiffCompressions;
import com.aspose.imaging.fileformats.tiff.enums.TiffExpectedFormat;
import com.aspose.imaging.fileformats.tiff.enums.TiffPhotometrics;
import com.aspose.imaging.imageoptions.TiffOptions;
String templatesFolder = "C:\\WorkDir\\";
String inputFile = templatesFolder + "template.tiff";
String outputFile = templatesFolder + "compressed.tiff";
try (Image image = Image.load(inputFile))
{
TiffOptions options = new TiffOptions(TiffExpectedFormat.Default);
options.setPhotometric(TiffPhotometrics.Ycbcr);
options.setCompression(TiffCompressions.Jpeg);
options.setBitsPerSample(new int[]{8, 8, 8});
image.save(outputFile, options);
}
import com.aspose.imaging.FileFormat;
import com.aspose.imaging.IMultipageImage;
import com.aspose.imaging.Image;
import com.aspose.imaging.ImageOptionsBase;
import com.aspose.imaging.imageoptions.*;
import java.util.Arrays;
import java.util.List;
import java.util.function.Function;
compressVectorFormatToSvg();
compressVectorFormatToEmf();
compressVectorFormatToWmf();
public static void compressVectorFormatToSvg()
{
compressVectorFormat(skip -> {
SvgOptions options = new SvgOptions();
options.setCompress(true);
return options;
}, ".svgz");
}
public static void compressVectorFormatToEmf()
{
compressVectorFormat(skip -> {
EmfOptions options = new EmfOptions();
options.setCompress(true);
return options;
}, ".emz");
}
public static void compressVectorFormatToWmf()
{
compressVectorFormat(skip -> {
WmfOptions options = new WmfOptions();
options.setCompress(true);
return options;
}, ".wmz");
}
public static void compressVectorFormat(Function<Object, ImageOptionsBase> outOptionsCreator, String extension)
{
String templatesFolder = "C:\\WorkDir\\";
List<String> fileFormats = Arrays.asList("cdr", "cmx", "odg", "otg", "eps");
fileFormats.forEach(
formatExt ->
{
String inputFile = templatesFolder + "template." + formatExt;
String outputFile = templatesFolder + "compressed_" + formatExt.toUpperCase();
try (Image image = Image.load(inputFile))
{
Function<Object, VectorRasterizationOptions> rasterizationOptionsFactory = (skip) ->
{
VectorRasterizationOptions options;
long fileFormat = image.getFileFormat();
if (fileFormat == FileFormat.Cdr)
{
options = new CdrRasterizationOptions();
}
else if (fileFormat == FileFormat.Cmx)
{
options = new CmxRasterizationOptions();
}
else if (fileFormat == FileFormat.Odg)
{
options = new OdgRasterizationOptions();
}
else if (fileFormat == FileFormat.Otg)
{
options = new OtgRasterizationOptions();
}
else
{
return null;
}
options.setPageWidth(image.getWidth());
options.setPageHeight(image.getHeight());
return options;
};
if ((image instanceof IMultipageImage) && ((IMultipageImage) image).getPageCount() > 1)
{
IMultipageImage multiPage = (IMultipageImage) image;
final Image[] pages = multiPage.getPages();
for (int pageIndex = 0; pageIndex < pages.length; pageIndex++)
{
ImageOptionsBase options = outOptionsCreator.apply(null);
options.setVectorRasterizationOptions(rasterizationOptionsFactory.apply(null));
pages[pageIndex].save(outputFile + "_p" + (pageIndex + 1) + extension, options);
}
}
else
{
ImageOptionsBase options = outOptionsCreator.apply(null);
options.setVectorRasterizationOptions(rasterizationOptionsFactory.apply(null));
image.save(outputFile + extension, options);
}
}
});
}
import com.aspose.imaging.Image;
import com.aspose.imaging.imageoptions.WebPOptions;
String templatesFolder = "C:\\WorkDir\\";
String inputFile = templatesFolder + "template.webp";
String outputFile = templatesFolder + "compressed.webp";
try (Image image = Image.load(inputFile))
{
WebPOptions options = new WebPOptions();
options.setLossless(false);
options.setQuality(50);
image.save(outputFile, options);
}
import com.aspose.imaging.Image;
import com.aspose.imaging.imageoptions.WmfOptions;
String templatesFolder = "C:\\WorkDir\\";
String inputFile = templatesFolder + "template.wmf";
String outputFile = templatesFolder + "compressed.wmz";
try (Image image = Image.load(inputFile))
{
WmfOptions options = new WmfOptions();
options.setCompress(true);
image.save(outputFile, options);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment