@Test public void testGetJpegImageData_444Sampling() throws Exception { String resource = "org/apache/shindig/gadgets/rewrite/image/testImage444.jpg"; InputStream is = getClass().getClassLoader().getResourceAsStream(resource); JpegImageUtils.JpegImageParams imageParams = JpegImageUtils.getJpegImageData(is, resource); assertEquals(JpegImageUtils.SamplingModes.YUV444, imageParams.getSamplingMode()); assertEquals(0.90F, imageParams.getChromaQualityFactor(), 0.01F); assertEquals(0.90F, imageParams.getLumaQualityFactor(), 0.01F); assertEquals(0.90F, imageParams.getApproxQualityFactor(), 0.01F); }
@Test public void testGetJpegImageData_notHuffmanOptimized() throws Exception { String resource = "org/apache/shindig/gadgets/rewrite/image/testImageNotHuffmanOptimized.jpg"; InputStream is = getClass().getClassLoader().getResourceAsStream(resource); JpegImageUtils.JpegImageParams imageParams = JpegImageUtils.getJpegImageData(is, resource); assertEquals(false, imageParams.isHuffmanOptimized()); } }
binaryParser.read2Bytes("Reading", is, "Reading Quantization Table Failed"); imageParams.addQTable(tableIndex, quanTable); toBeProcessed -= 64*(precision + 1);
final JpegImageParams imageParams = new JpegImageParams(SamplingModes.UNKNOWN, false, -1);
imageParams.setSamplingMode(binaryParser.readByte("Sampling Factors", is, "Unable to read the sampling factor from the 'Y' channel component spec")); imageParams.setLumaIndex(binaryParser.readByte("Quantization Table Index", is, "Unable to read Quantization table index of 'Y' channel")); imageParams.setChromaIndex(binaryParser.readByte("Quantization Table Index", is, "Unable to read Quantization table index of 'Cb' Channel")); } else {
protected ImageOutputter getOutputter() { Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName(getOriginalFormatName()); if (writers.hasNext()) { ImageWriter writer = writers.next(); ImageWriteParam param = writer.getDefaultWriteParam(); if (getOriginalFormatName().equals("jpeg")) { param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); param.setCompressionQuality(config.getJpegCompression()); if (param instanceof JPEGImageWriteParam) { ((JPEGImageWriteParam) param).setOptimizeHuffmanTables( config.getJpegHuffmanOptimization()); } } JpegImageUtils.SamplingModes samplingMode = JpegImageUtils.SamplingModes.DEFAULT; if (config.getJpegRetainSubsampling() && sourceImageParams != null) { samplingMode = sourceImageParams.getSamplingMode(); } return new ImageIOOutputter(writer, param, samplingMode); } return new SanselanOutputter(FORMAT_NAME_TO_IMAGE_FORMAT.get(getOriginalFormatName())); }
@Test public void testGetJpegImageData_huffmanOptimized() throws Exception { String resource = "org/apache/shindig/gadgets/rewrite/image/testImage420.jpg"; InputStream is = getClass().getClassLoader().getResourceAsStream(resource); JpegImageUtils.JpegImageParams imageParams = JpegImageUtils.getJpegImageData(is, resource); assertEquals(true, imageParams.isHuffmanOptimized()); }
@Test public void testGetJpegImageData_420Sampling() throws Exception { String resource = "org/apache/shindig/gadgets/rewrite/image/testImage420.jpg"; InputStream is = getClass().getClassLoader().getResourceAsStream(resource); JpegImageUtils.JpegImageParams imageParams = JpegImageUtils.getJpegImageData(is, resource); assertEquals(JpegImageUtils.SamplingModes.YUV420, imageParams.getSamplingMode()); }
@Test public void testRetainSubsmaplingEnabled() throws Exception { HttpResponse resp = createResponse("org/apache/shindig/gadgets/rewrite/image/testImage444.jpg", "image/jpeg"); HttpResponse rewritten = rewrite(resp, getConfigWithRetainSampling(true, 0.70f)); JpegImageUtils.JpegImageParams params = JpegImageUtils.getJpegImageData(rewritten.getResponse(), ""); assertTrue(rewritten.getContentLength() < resp.getContentLength()); assertEquals(JpegImageUtils.SamplingModes.YUV444, params.getSamplingMode()); }
public float getLumaQualityFactor() { if (lumaQualityFactor < 0 && lumaIndex >= 0) { lumaQualityFactor = approximateQuality(tables[lumaIndex], k1LumaQuantTable); } return lumaQualityFactor; }
@Test public void testRetainSubsmaplingEnabled() throws Exception { HttpResponse resp = createResponse("org/apache/shindig/gadgets/rewrite/image/testImage444.jpg", "image/jpeg"); HttpResponse rewritten = rewrite(resp, getConfigWithRetainSampling(true, 0.70f)); JpegImageUtils.JpegImageParams params = JpegImageUtils.getJpegImageData(rewritten.getResponse(), ""); assertTrue(rewritten.getContentLength() < resp.getContentLength()); assertEquals(JpegImageUtils.SamplingModes.YUV444, params.getSamplingMode()); }
@Test public void testGetJpegImageData_420Sampling() throws Exception { String resource = "org/apache/shindig/gadgets/rewrite/image/testImage420.jpg"; InputStream is = getClass().getClassLoader().getResourceAsStream(resource); JpegImageUtils.JpegImageParams imageParams = JpegImageUtils.getJpegImageData(is, resource); assertEquals(JpegImageUtils.SamplingModes.YUV420, imageParams.getSamplingMode()); }
public float getApproxQualityFactor() { if (approxQualityFactor < 0) { approxQualityFactor = (getLumaQualityFactor() + 2 * getChromaQualityFactor()) / 3.0F; } return approxQualityFactor; } }
@Test public void testRetainSubsmaplingDisabled() throws Exception { HttpResponse resp = createResponse("org/apache/shindig/gadgets/rewrite/image/testImage444.jpg", "image/jpeg"); HttpResponse rewritten = rewrite(resp, getConfigWithRetainSampling(false, 0.70f)); JpegImageUtils.JpegImageParams params = JpegImageUtils.getJpegImageData(rewritten.getResponse(), ""); assertTrue(rewritten.getContentLength() < resp.getContentLength()); assertEquals(JpegImageUtils.SamplingModes.YUV420, params.getSamplingMode()); }
@Test public void testGetJpegImageData_444Sampling() throws Exception { String resource = "org/apache/shindig/gadgets/rewrite/image/testImage444.jpg"; InputStream is = getClass().getClassLoader().getResourceAsStream(resource); JpegImageUtils.JpegImageParams imageParams = JpegImageUtils.getJpegImageData(is, resource); assertEquals(JpegImageUtils.SamplingModes.YUV444, imageParams.getSamplingMode()); assertEquals(0.90F, imageParams.getChromaQualityFactor(), 0.01F); assertEquals(0.90F, imageParams.getLumaQualityFactor(), 0.01F); assertEquals(0.90F, imageParams.getApproxQualityFactor(), 0.01F); }
@Test public void testRetainSubsmaplingDisabled() throws Exception { HttpResponse resp = createResponse("org/apache/shindig/gadgets/rewrite/image/testImage444.jpg", "image/jpeg"); HttpResponse rewritten = rewrite(resp, getConfigWithRetainSampling(false, 0.70f)); JpegImageUtils.JpegImageParams params = JpegImageUtils.getJpegImageData(rewritten.getResponse(), ""); assertTrue(rewritten.getContentLength() < resp.getContentLength()); assertEquals(JpegImageUtils.SamplingModes.YUV420, params.getSamplingMode()); }
public float getChromaQualityFactor() { if (chromaQualityFactor < 0 && chromaIndex >= 0) { chromaQualityFactor = approximateQuality(tables[chromaIndex], k2ChromaQuantTable); } return chromaQualityFactor; }
@Test public void testGetJpegImageData_huffmanOptimized() throws Exception { String resource = "org/apache/shindig/gadgets/rewrite/image/testImage420.jpg"; InputStream is = getClass().getClassLoader().getResourceAsStream(resource); JpegImageUtils.JpegImageParams imageParams = JpegImageUtils.getJpegImageData(is, resource); assertEquals(true, imageParams.isHuffmanOptimized()); }
@Test public void testGetJpegImageData_notHuffmanOptimized() throws Exception { String resource = "org/apache/shindig/gadgets/rewrite/image/testImageNotHuffmanOptimized.jpg"; InputStream is = getClass().getClassLoader().getResourceAsStream(resource); JpegImageUtils.JpegImageParams imageParams = JpegImageUtils.getJpegImageData(is, resource); assertEquals(false, imageParams.isHuffmanOptimized()); } }