/* * Copyright 1999-2004 Alibaba.com All right reserved. This software is the * confidential and proprietary information of Alibaba.com ("Confidential * Information"). You shall not disclose such Confidential Information and shall * use it only in accordance with the terms of the license agreement you entered * into with Alibaba.com. */ package com.alibaba.simpleimage.gif; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import org.apache.commons.io.IOUtils; import com.alibaba.simpleimage.BaseTest; import com.alibaba.simpleimage.ImageFormat; import com.alibaba.simpleimage.ImageWrapper; import com.alibaba.simpleimage.SimpleImageException; import com.alibaba.simpleimage.render.ReadRender; import com.alibaba.simpleimage.render.ScaleParameter; import com.alibaba.simpleimage.render.ScaleRender; import com.alibaba.simpleimage.render.WriteParameter; import com.alibaba.simpleimage.render.WriteRender; /** * 类GIFTest.java的实现描述:TODO 类实现描述 * @author wendell 2011-8-16 下午02:25:26 */ public class GIFTest extends BaseTest { static File gifDir = new File("./src/test/resources/conf.test/simpleimage/gif"); public void testGIF2GIF() throws Exception { for(File file : gifDir.listFiles()) { String fileName = file.getName().toLowerCase(); if(fileName.endsWith("gif")) { File outFile = new File(resultDir, "GIF2GIF_" + fileName); doReadWrite(file, outFile, ImageFormat.GIF); } } } public void testCMYK2GIF() throws Exception { File cmykDir = new File("./src/test/resources/conf.test/simpleimage/cmyk"); for(File file : cmykDir.listFiles()) { String fileName = file.getName().toLowerCase(); if(fileName.endsWith("jpg")) { File outFile = new File(resultDir, "CMYK2GIF_" + fileName.substring(0, fileName.indexOf(".")) + ".gif"); doReadWrite(file, outFile, ImageFormat.GIF); } } } public void testRGB2GIF() throws Exception { File rgbDir = new File("./src/test/resources/conf.test/simpleimage/rgb"); for(File file : rgbDir.listFiles()) { String fileName = file.getName().toLowerCase(); if(fileName.endsWith("jpg")) { File outFile = new File(resultDir, "RGB2GIF_" + fileName.substring(0, fileName.indexOf(".")) + ".gif"); doReadWrite(file, outFile, ImageFormat.GIF); } } } public void testNormalJPEG2GIF() throws Exception { File jpegDir = new File("./src/test/resources/conf.test/simpleimage/scale"); for(File file : jpegDir.listFiles()) { String fileName = file.getName().toLowerCase(); if(fileName.endsWith("jpg")) { File outFile = new File(resultDir, "JPEG2GIF_" + fileName.substring(0, fileName.indexOf(".")) + ".gif"); doReadWrite(file, outFile, ImageFormat.GIF); } } } public void testBMP2GIF() throws Exception { File bmpDir = new File("./src/test/resources/conf.test/simpleimage/bmp"); for(File file : bmpDir.listFiles()) { String fileName = file.getName().toLowerCase(); if(fileName.endsWith("bmp")) { File outFile = new File(resultDir, "BMP2GIF_" + fileName.substring(0, fileName.indexOf(".")) + ".gif"); doReadWrite(file, outFile, ImageFormat.GIF); } } } public void testPNG2GIF() throws Exception { File pngDir = new File("./src/test/resources/conf.test/simpleimage/png"); for(File file : pngDir.listFiles()) { String fileName = file.getName().toLowerCase(); if(fileName.endsWith("png")) { File outFile = new File(resultDir, "PNG2GIF_" + fileName.substring(0, fileName.indexOf(".")) + ".gif"); try { if(fileName.equals("dst.png") || "16rgba.png".equals(fileName)) { continue; } doReadWrite(file, outFile, ImageFormat.GIF); } catch(Exception e) { throw new RuntimeException(fileName, e); } } } } public void testGIF2JPEG() throws Exception { for(File file : gifDir.listFiles()) { String fileName = file.getName().toLowerCase(); if(fileName.endsWith("gif")) { File outFile = new File(resultDir, "GIF2JPEG_" + fileName.substring(0, fileName.indexOf(".")) + ".jpg"); doReadWrite(file, outFile, ImageFormat.JPEG); } } } public void testGIFScale() throws Exception { for(File file : gifDir.listFiles()) { String fileName = file.getName().toLowerCase(); if(fileName.endsWith("gif")) { File outFile = new File(resultDir, "SCALEGIF_" + fileName.substring(0, fileName.indexOf(".")) + ".gif"); doScaleWork(file, outFile, ImageFormat.GIF); } } } public void testColorQuantOctTree() throws Exception { for(File file : gifDir.listFiles()) { String fileName = file.getName().toLowerCase(); if(fileName.endsWith("gif")) { File outFile = new File(resultDir, "GIF2GIF_OCTTREE_" + fileName); doColorQuant(file, outFile, WriteParameter.QuantAlgorithm.OctTree); } } File jpegDir = new File("./src/test/resources/conf.test/simpleimage/scale"); for(File file : jpegDir.listFiles()) { String fileName = file.getName().toLowerCase(); if(fileName.endsWith("jpg")) { File outFile = new File(resultDir, "JPEG2GIF_OCTTREE_" + fileName.substring(0, fileName.indexOf(".")) + ".gif"); doColorQuant(file, outFile, WriteParameter.QuantAlgorithm.OctTree); } } } void N_testColorQuantNeuQuant() throws Exception { for(File file : gifDir.listFiles()) { String fileName = file.getName().toLowerCase(); if(fileName.endsWith("gif")) { File outFile = new File(resultDir, "GIF2GIF_NEUQUANT_" + fileName); doColorQuant(file, outFile, WriteParameter.QuantAlgorithm.NeuQuant); } } File jpegDir = new File("./src/test/resources/conf.test/simpleimage/scale"); for(File file : jpegDir.listFiles()) { String fileName = file.getName().toLowerCase(); if(fileName.endsWith("jpg")) { File outFile = new File(resultDir, "JPEG2GIF_NEUQUANT_" + fileName.substring(0, fileName.indexOf(".")) + ".gif"); doColorQuant(file, outFile, WriteParameter.QuantAlgorithm.NeuQuant); } } } public void testColorQuantMedianCut() throws Exception { for(File file : gifDir.listFiles()) { String fileName = file.getName().toLowerCase(); if(fileName.endsWith("gif")) { File outFile = new File(resultDir, "GIF2GIF_MEDIANCUT_" + fileName); doColorQuant(file, outFile, WriteParameter.QuantAlgorithm.MedianCut); } } File jpegDir = new File("./src/test/resources/conf.test/simpleimage/scale"); for(File file : jpegDir.listFiles()) { String fileName = file.getName().toLowerCase(); if(fileName.endsWith("jpg")) { File outFile = new File(resultDir, "JPEG2GIF_MEDIANCUT_" + fileName.substring(0, fileName.indexOf(".")) + ".gif"); doColorQuant(file, outFile, WriteParameter.QuantAlgorithm.MedianCut); } } } void doColorQuant(File in, File out, WriteParameter.QuantAlgorithm quantAlg) throws Exception { WriteRender wr = null; InputStream inStream = new FileInputStream(in); try { ReadRender rr = new ReadRender(inStream); wr = new WriteRender(rr, out, ImageFormat.GIF, new WriteParameter(quantAlg)); wr.render(); } finally { IOUtils.closeQuietly(inStream); if(wr != null) { wr.dispose(); } } } void doScaleWork(File in, boolean toRGB, File out, ImageFormat format) throws Exception { WriteRender wr = null; InputStream inStream = new FileInputStream(in); try { ReadRender rr = new ReadRender(inStream, toRGB); ScaleRender sr = new ScaleRender(rr, new ScaleParameter(100, 100)); wr = new WriteRender(sr, out, format); wr.render(); } finally { IOUtils.closeQuietly(inStream); if(wr != null) { wr.dispose(); } } } void doScaleWork(File in, File out, ImageFormat format) throws Exception { this.doScaleWork(in, true, out, format); } public void testGIFSize() throws Exception { ImageWrapper img = read(new File(gifDir, "size.gif")); assertEquals(720, img.getWidth()); assertEquals(531, img.getHeight()); img = read(new File(gifDir, "1212.gif")); assertEquals(266, img.getWidth()); assertEquals(200, img.getHeight()); img = read(new File(gifDir, "GIF89a_1.gif")); assertEquals(640, img.getWidth()); assertEquals(480, img.getHeight()); img = read(new File(gifDir, "input87.gif")); assertEquals(70, img.getWidth()); assertEquals(46, img.getHeight()); } public void testIndexColorModelGIFScale() throws Exception { for(File file : gifDir.listFiles()) { String fileName = file.getName().toLowerCase(); if(fileName.endsWith("gif")) { File outFile = new File(resultDir, "SCALEGIF_" + fileName.substring(0, fileName.indexOf(".")) + ".gif"); if(fileName.equals("animate_transparent.gif") || fileName.equals("input87.gif")) { continue; } try { doScaleWork(file, false, outFile, ImageFormat.GIF); } catch(SimpleImageException e) { assertTrue(e.getMessage(), true); continue; } assertTrue("IndexColorModel GIF scale success: " + fileName, false); } } } public void testIndexColorModelGIFOutput() throws Exception { for(File file : gifDir.listFiles()) { String fileName = file.getName().toLowerCase(); if(fileName.endsWith("gif")) { File outFile = new File(resultDir, "GIF2GIF_" + fileName); doReadWrite(file, false, outFile, ImageFormat.GIF); } } } }