Description:

This change adds setOptimizeHuffmanTables(true) to the Jpeg params. (gives
additional 6% of compression without any addition loss in the image quality)

Since the generalized call for ImageIOOutputter.write(new IIOImage()) has a
bug,
that ignores this parameter while enocding, we are using more specific call
for
writing for jpeg images that respects this new parameter.
Refer: com.sun.imageio.plugins.jpeg.JPEGImageWriter.java:352 write(...)
function.

Note: The old flow also has a hidden bug that sets wrong 'Default
Quantization
Tables' while doing jpeg compression with 'ImageWriteParam.MODE_EXPLICIT'
that
results in encode phase of jpeg effectively use different compression
quality (>
than config.getJpegCompression()). This bug fix effectively gives +4% more
compression in bytes.
Refer:
(
http://www.java2s.com/Open-Source/Java-Document/6.0-JDK-Modules-com.sun/image..
.)
BaseOptimizer.java:172 in writer.getDefaultImageMetadata(...) --->
com.sun.imageio.plugins.jpeg.JPEGImageWriter.java:609 --->
com.sun.imageio.plugins.jpeg.DQTMarkerSegment.java:215 in Qtable(boolean
wantLuma, float quality) function, K2Div2Chrominance is used instead of
K2Chrominance.

Please review this at http://codereview.appspot.com/2322042/

Affected files:
 java/common/conf/shindig.properties
 
java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/PNGOptimizer.java
 
java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/JPEGOptimizer.java
 
java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/OptimizerConfig.java
 
java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/BaseOptimizer.java

Regards,
Satyanarayana.

Reply via email to