Image Compressor Licensing Plugin

Contents
[ ]

         Use the capabilities of the Image Compressor license plugin to effortlessly optimize your image sizes across a diverse array of supported formats. To initiate compression, first secure a Metered license by applying your public key and private password using the `SetMeteredKey()` method. Compression options vary depending on the image format. Below, you'll find C# code snippets tailored for popular image formats. Whether you're compressing raster or vector images, you have a wide range of options at your disposal. Take, for instance, the WEBP format, where you can customize compression settings using WebpOptions(), toggling the Lossless parameter to false and setting the Quality parameter to 50%.

using Aspose.Imaging;
using Aspose.Imaging.FileFormats.Emf;
using Aspose.Imaging.FileFormats.Png;
using Aspose.Imaging.FileFormats.Tiff;
using Aspose.Imaging.FileFormats.Tiff.Enums;
using Aspose.Imaging.ImageOptions;
using Aspose.Imaging.Sources;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using static System.Net.Mime.MediaTypeNames;
string templatesFolder = @"c:\Users\USER\Downloads\templates\";
string dataDir = templatesFolder;
Run();
//------------------------------------------------------------------------
// Compression plug-in use sample
//------------------------------------------------------------------------
void Run()
{
// Valid compression plug-in use sample
Metered license = new Metered();
// Only metered plug-in license is supported
license.SetMeteredKey("<your public key>", "<your private key>");
foreach (var inputFile in Directory.GetFiles(Path.Combine(templatesFolder, "*.jpg"))
{
using (var image = Image.Load(inputFile))
{
GetCompressionOptions(FileFormat.Png, image).ForEach(options =>
{
ImageOptionsBase oBase = options.Item1;
string currentOutputFile = outputFile;
if (options.Item2 != null)
{
currentOutputFile += $"{options.Item2}";
}
doCompress(currentOutputFile, image, options.Item1);
}
);
}
BaseInputOutputClass.RemoveFile(outputFile);
}
}
List<Tuple<ImageOptionsBase, string>> GetCompressionOptions(FileFormat fileFormat, Image image)
{
Func<VectorRasterizationOptions> rasterizationOptionsFactory = () =>
{
switch (image.FileFormat)
{
case FileFormat.Cdr:
return new CdrRasterizationOptions() { PageWidth = image.Width, PageHeight = image.Height };
case FileFormat.Cmx:
return new CmxRasterizationOptions() { PageWidth = image.Width, PageHeight = image.Height };
case FileFormat.Odg:
return new OdgRasterizationOptions() { PageWidth = image.Width, PageHeight = image.Height };
case FileFormat.Otg:
return new OtgRasterizationOptions() { PageWidth = image.Width, PageHeight = image.Height };
case FileFormat.Eps:
return new EpsRasterizationOptions() { PageWidth = image.Width, PageHeight = image.Height };
default:
return null;
}
};
switch (fileFormat)
{
case FileFormat.Apng:
{
return new List<Tuple<ImageOptionsBase, string>> {
new Tuple<ImageOptionsBase, string>(new ApngOptions
{
CompressionLevel = 9,
Progressive = true,
ColorType = PngColorType.IndexedColor,
Palette = ColorPaletteHelper.GetCloseImagePalette((RasterImage)image, 1 << 8)
},null)
};
}
case FileFormat.Bmp:
{
return new List<Tuple<ImageOptionsBase, string>>
{
{ new Tuple<ImageOptionsBase,string>(new BmpOptions
{
Compression = BitmapCompression.Rgb,
BitsPerPixel = 4,
Palette = ColorPaletteHelper.GetCloseImagePalette((RasterImage)image, 1 << 4)
},
"Rgb4.bmp")
},
{ new Tuple<ImageOptionsBase,string>(new BmpOptions
{
Compression = BitmapCompression.Rgb,
BitsPerPixel = 8,
Palette = ColorPaletteHelper.GetCloseImagePalette((RasterImage)image, 1 << 8)
}, "Rgb8.bmp")
}
};
}
case FileFormat.Cdr:
case FileFormat.Cmx:
case FileFormat.Odg:
case FileFormat.Otg:
case FileFormat.Eps:
{
return new List<Tuple<ImageOptionsBase, string>>
{
new Tuple<ImageOptionsBase, string>(new SvgOptions()
{
Compress = true,
VectorRasterizationOptions = rasterizationOptionsFactory.Invoke()
},".svgz")
};
}
case FileFormat.Svg:
{
return new List<Tuple<ImageOptionsBase, string>>
{
new Tuple<ImageOptionsBase, string>(new SvgOptions()
{
Compress = true
},".svgz")
};
}
case FileFormat.Dicom:
{
return new List<Tuple<ImageOptionsBase, string>>
{
new Tuple<ImageOptionsBase, string>(new DicomOptions()
{
ColorType = ColorType.Grayscale8Bit, // or ColorType.Rgb24Bit for truecolor images
Compression = new Compression
{
Type = CompressionType.Jpeg,
Jpeg = new JpegOptions
{
Quality = 75
}
},
},null)
};
}
case FileFormat.Dng:
case FileFormat.Tiff:
{
return new List<Tuple<ImageOptionsBase, string>>
{
new Tuple<ImageOptionsBase, string>(new TiffOptions(TiffExpectedFormat.Default)
{
Photometric = TiffPhotometrics.Ycbcr,
Compression = TiffCompressions.Jpeg,
BitsPerSample = new ushort[] { 8, 8, 8 }
}, null)
};
}
case FileFormat.Emf:
{
return new List<Tuple<ImageOptionsBase, string>>
{
new Tuple<ImageOptionsBase, string>(
new EmfOptions()
{
Compress = true,
},
".emz")
};
}
case FileFormat.Wmf:
{
return new List<Tuple<ImageOptionsBase, string>>
{
new Tuple<ImageOptionsBase, string>(
new WmfOptions()
{
Compress = true,
},
".wmz")
};
}
case FileFormat.Tga:
{
return new List<Tuple<ImageOptionsBase, string>>
{
new Tuple<ImageOptionsBase, string>(
new PngOptions
{
CompressionLevel = 9,
Progressive = true,
ColorType = PngColorType.IndexedColor,
Palette = ColorPaletteHelper.GetCloseImagePalette((RasterImage)image, 1 << 5)
}, ".png")
};
}
case FileFormat.Gif:
{
return new List<Tuple<ImageOptionsBase, string>>
{
new Tuple<ImageOptionsBase, string>(new GifOptions
{
IsPaletteSorted = false,
DoPaletteCorrection = false,
MaxDiff = 500,
ColorResolution = 7,
Palette = ColorPaletteHelper.GetCloseImagePalette((RasterImage)image, 1 << 8)
}, null)
};
}
case FileFormat.Ico:
{
IcoImage ico = image as IcoImage;
if (ico == null)
{
throw new NotSupportedException($"The ico image is expectecd but {fileFormat} is found");
}
var page = ico.Pages.OrderBy(p => p.Width * p.Height).ThenBy(p => p.BitsPerPixel).Last();
return new List<Tuple<ImageOptionsBase, string>>
{
new Tuple<ImageOptionsBase, string>(new IcoOptions
{
Format = Aspose.Imaging.FileFormat.Bmp,
BitsPerPixel = 8,
Palette = ColorPaletteHelper.GetCloseImagePalette(page as Aspose.Imaging.RasterImage, 1 << 8)
}, null)
};
}
case FileFormat.Jpeg2000:
{
return new List<Tuple<ImageOptionsBase, string>>
{
new Tuple<ImageOptionsBase, string>(new Jpeg2000Options
{
Codec = Jpeg2000Codec.J2K,
Irreversible = false,
CompressionRatios = new[] { 100 }
}, null)
};
}
case FileFormat.Jpeg:
{
return new List<Tuple<ImageOptionsBase, string>>
{
new Tuple<ImageOptionsBase, string>(new JpegOptions
{
CompressionType = JpegCompressionMode.Progressive,
ColorType = JpegCompressionColorMode.YCbCr,
Quality = 75
}, null)
};
}
case FileFormat.Png:
{
return new List<Tuple<ImageOptionsBase, string>>
{
new Tuple<ImageOptionsBase, string>(new PngOptions
{
CompressionLevel = 9,
Progressive = true,
ColorType = PngColorType.IndexedColor,
Palette = ColorPaletteHelper.GetCloseImagePalette((RasterImage)image, 1 << 5)
}, null)
};
}
case FileFormat.Webp:
{
return new List<Tuple<ImageOptionsBase, string>>
{
new Tuple<ImageOptionsBase, string>(
new WebPOptions()
{
Lossless = false,
Quality = 50
}, null)
};
}
default:
{
throw new NotSupportedException($"FileFormat {fileFormat} is not supported");
}
}
}
Image doCompress(string outputFile, Image image, ImageOptionsBase compressOptions)
{
Image outImage = image;
outImage.Save(outputFile, compressOptions);
return outImage;
}

Test the capabilities of our free online image compression application demo directly on the Aspose.Imaging Compress App website.