if (config.isJpegConversionAllowed()) { boolean isOpaque; if (palettized != null){
if (config.isJpegConversionAllowed()) { boolean isOpaque; if (palettized != null){
if (config.isJpegConversionAllowed()) { boolean isOpaque; if (palettized != null){
OptimizerConfig getConfigWithRetainSampling(boolean enabled, float quality) { OptimizerConfig defaultConfig = new OptimizerConfig(); return new OptimizerConfig(defaultConfig.getMaxInMemoryBytes(), defaultConfig.getMaxPaletteSize(), defaultConfig.isJpegConversionAllowed(), quality, defaultConfig.getMinThresholdBytes(), defaultConfig.getJpegHuffmanOptimization(), enabled); } }
OptimizerConfig getConfigWithRetainSampling(boolean enabled, float quality) { OptimizerConfig defaultConfig = new OptimizerConfig(); return new OptimizerConfig(defaultConfig.getMaxInMemoryBytes(), defaultConfig.getMaxPaletteSize(), defaultConfig.isJpegConversionAllowed(), quality, defaultConfig.getMinThresholdBytes(), defaultConfig.getJpegHuffmanOptimization(), enabled); } }
@Override protected void rewriteImpl(BufferedImage image) throws IOException { int pngLength = Integer.MAX_VALUE; if (config.isJpegConversionAllowed()) { // Create a new optimizer config and disable JPEG conversion OptimizerConfig pngConfig = new OptimizerConfig(config.getMaxInMemoryBytes(), config.getMaxPaletteSize(), false, config.getJpegCompression(), config.getMinThresholdBytes(), config.getJpegHuffmanOptimization(), config.getJpegRetainSubsampling()); // Output the image as PNG PNGOptimizer pngOptimizer = new PNGOptimizer(pngConfig, response); pngOptimizer.rewriteImpl(image); if (pngOptimizer.getRewrittenImage() != null) { // PNG was better than original so use it minBytes = pngOptimizer.getRewrittenImage(); minLength = minBytes.length; pngLength = minLength; } } // Write as standard JPEG using the configured default compression level write(image); // JPEG did not beat PNG if (pngLength == minLength) { usePng = true; } }