Skip to content

Instantly share code, notes, and snippets.

@aspose-com-gists
Last active December 31, 2024 05:42
Show Gist options
  • Save aspose-com-gists/524c3e3c3146a0eb00a23600f3990cff to your computer and use it in GitHub Desktop.
Save aspose-com-gists/524c3e3c3146a0eb00a23600f3990cff to your computer and use it in GitHub Desktop.

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