/*
* Copyright 2012 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;
import java.io.File;
import org.w3c.dom.Node;
import com.alibaba.simpleimage.render.DrawTextParameter;
import com.alibaba.simpleimage.render.DrawTextRender;
import com.alibaba.simpleimage.render.FixDrawTextItem;
import com.alibaba.simpleimage.render.ScaleParameter;
import com.alibaba.simpleimage.render.ScaleRender;
import com.alibaba.simpleimage.render.WriteRender;
import com.alibaba.simpleimage.util.NodeUtils;
/**
* 类ImageCloneTest.java的实现描述:TODO 类实现描述
*
* @author wendell 2012-3-12 下午4:17:53
*/
public class ImageCloneTest extends BaseTest {
static File jpgDir = new File("./src/test/resources/conf.test/simpleimage/scale");
static File cmykDir = new File("./src/test/resources/conf.test/simpleimage/cmyk");
static File grayDir = new File("./src/test/resources/conf.test/simpleimage/gray");
static File gifDir = new File("./src/test/resources/conf.test/simpleimage/gif");
static File pngDir = new File("./src/test/resources/conf.test/simpleimage/png");
public void testJPEGClone() throws Exception {
File input = new File(jpgDir, "334.jpg");
ImageWrapper imgWrapper = read(input);
ImageWrapper newImg = (ImageWrapper) imgWrapper.clone();
assertEquals(imgWrapper.getHeight(), newImg.getHeight());
assertEquals(imgWrapper.getWidth(), newImg.getWidth());
assertEquals(imgWrapper.getHorizontalSamplingFactor(0), newImg.getHorizontalSamplingFactor(0));
assertEquals(imgWrapper.getHorizontalSamplingFactor(1), newImg.getHorizontalSamplingFactor(1));
assertEquals(imgWrapper.getHorizontalSamplingFactor(2), newImg.getHorizontalSamplingFactor(2));
assertEquals(imgWrapper.getNumOfImages(), newImg.getNumOfImages());
assertEquals(imgWrapper.getQuality(), newImg.getQuality());
assertEquals(imgWrapper.isBroken(), newImg.isBroken());
assertEquals(imgWrapper.getVerticalSamplingFactor(0), newImg.getVerticalSamplingFactor(0));
assertEquals(imgWrapper.getVerticalSamplingFactor(1), newImg.getVerticalSamplingFactor(1));
assertEquals(imgWrapper.getVerticalSamplingFactor(2), newImg.getVerticalSamplingFactor(2));
assertEquals(imgWrapper.getImageFormat(), newImg.getImageFormat());
}
public void testPNGClone() throws Exception {
File input = new File(pngDir, "normal.png");
ImageWrapper imgWrapper = read(input);
ImageWrapper newImg = (ImageWrapper) imgWrapper.clone();
assertEquals(imgWrapper.getHeight(), newImg.getHeight());
assertEquals(imgWrapper.getWidth(), newImg.getWidth());
assertEquals(imgWrapper.getHorizontalSamplingFactor(0), newImg.getHorizontalSamplingFactor(0));
assertEquals(imgWrapper.getHorizontalSamplingFactor(1), newImg.getHorizontalSamplingFactor(1));
assertEquals(imgWrapper.getHorizontalSamplingFactor(2), newImg.getHorizontalSamplingFactor(2));
assertEquals(imgWrapper.getNumOfImages(), newImg.getNumOfImages());
assertEquals(imgWrapper.getQuality(), newImg.getQuality());
assertEquals(imgWrapper.getVerticalSamplingFactor(0), newImg.getVerticalSamplingFactor(0));
assertEquals(imgWrapper.getVerticalSamplingFactor(1), newImg.getVerticalSamplingFactor(1));
assertEquals(imgWrapper.getVerticalSamplingFactor(2), newImg.getVerticalSamplingFactor(2));
assertEquals(imgWrapper.getImageFormat(), newImg.getImageFormat());
}
public void testGIFClone() throws Exception {
File input = new File(gifDir, "1212.gif");
ImageWrapper imgWrapper = read(input);
ImageWrapper newImg = (ImageWrapper) imgWrapper.clone();
assertTrue(imgWrapper.getStreamMetadata() != newImg.getStreamMetadata());
assertEquals(imgWrapper.getHeight(), newImg.getHeight());
assertEquals(imgWrapper.getWidth(), newImg.getWidth());
for (int i = 0; i < imgWrapper.getNumOfImages(); i++) {
assertEquals(imgWrapper.getHeight(i), newImg.getHeight(i));
assertEquals(imgWrapper.getWidth(i), newImg.getWidth(i));
}
assertEquals(imgWrapper.getHorizontalSamplingFactor(0), newImg.getHorizontalSamplingFactor(0));
assertEquals(imgWrapper.getHorizontalSamplingFactor(1), newImg.getHorizontalSamplingFactor(1));
assertEquals(imgWrapper.getHorizontalSamplingFactor(2), newImg.getHorizontalSamplingFactor(2));
assertEquals(imgWrapper.getNumOfImages(), newImg.getNumOfImages());
assertEquals(imgWrapper.getQuality(), newImg.getQuality());
assertEquals(imgWrapper.getVerticalSamplingFactor(0), newImg.getVerticalSamplingFactor(0));
assertEquals(imgWrapper.getVerticalSamplingFactor(1), newImg.getVerticalSamplingFactor(1));
assertEquals(imgWrapper.getVerticalSamplingFactor(2), newImg.getVerticalSamplingFactor(2));
assertEquals(imgWrapper.getImageFormat(), newImg.getImageFormat());
}
public void testCloneInstanceIndependence() throws Exception {
File input = new File(jpgDir, "334.jpg");
ImageWrapper imgWrapper = read(input);
ImageWrapper newImg = (ImageWrapper) imgWrapper.clone();
imgWrapper.setHorizontalSamplingFactor(1, 2);
assertEquals(2, imgWrapper.getHorizontalSamplingFactor(1));
assertEquals(1, newImg.getHorizontalSamplingFactor(1));
imgWrapper.setVerticalSamplingFactor(2, 2);
assertEquals(2, imgWrapper.getVerticalSamplingFactor(2));
assertEquals(1, newImg.getVerticalSamplingFactor(2));
imgWrapper.setBroken(true);
assertEquals(false, newImg.isBroken());
input = new File(gifDir, "animate_4.gif");
imgWrapper = read(input);
newImg = (ImageWrapper) imgWrapper.clone();
Node streamMetadata = imgWrapper.getStreamMetadata();
NodeUtils.removeChild(streamMetadata, "GlobalColorTable");
assertNull(NodeUtils.getChild(streamMetadata, "GlobalColorTable"));
assertNotNull(NodeUtils.getChild(newImg.getStreamMetadata(), "GlobalColorTable"));
Node imageMetadata = imgWrapper.getMetadata(0);
assertNotNull(NodeUtils.getChild(imageMetadata, "LocalColorTable"));
NodeUtils.removeChild(imageMetadata, "LocalColorTable");
assertNull(NodeUtils.getChild(imageMetadata, "LocalColorTable"));
assertNotNull(NodeUtils.getChild(newImg.getMetadata(0), "LocalColorTable"));
}
public void testCloneJPEGOutput() throws Exception {
DrawTextParameter dparam = new DrawTextParameter();
dparam.addTextInfo(new FixDrawTextItem("alibaba"));
File[] files = jpgDir.listFiles();
for (File file : files) {
String fileName = file.getName().toLowerCase();
if (fileName.endsWith("jpg")) {
File outFile1 = new File(resultDir, "CLONEJPEG_" + fileName + "_1.jpg");
File outFile2 = new File(resultDir, "CLONEJPEG_" + fileName + "_2.jpg");
ImageWrapper imgWrapper = read(file);
ImageWrapper cloneWrapper = (ImageWrapper) imgWrapper.clone();
scale(imgWrapper, new ScaleParameter(100, 100), outFile1, ImageFormat.JPEG);
draw(cloneWrapper, dparam, outFile2, ImageFormat.JPEG);
}
}
}
public void testCloneGIFOutput() throws Exception {
DrawTextParameter dparam = new DrawTextParameter();
dparam.addTextInfo(new FixDrawTextItem("alibaba"));
File[] files2 = gifDir.listFiles();
for (File file : files2) {
String fileName = file.getName().toLowerCase();
if (fileName.endsWith("gif")) {
File outFile1 = new File(resultDir, "CLONEGIF_" + fileName + "_1.gif");
File outFile2 = new File(resultDir, "CLONEGIF_" + fileName + "_2.gif");
ImageWrapper imgWrapper = read(file);
ImageWrapper cloneWrapper = (ImageWrapper) imgWrapper.clone();
draw(imgWrapper, dparam, outFile2, ImageFormat.GIF);
scale(cloneWrapper, new ScaleParameter(100, 100), outFile1, ImageFormat.GIF);
}
}
}
void scale(ImageWrapper imgWrapper, ScaleParameter param, File output, ImageFormat format) throws Exception {
WriteRender wr = null;
try {
ImageRender sr = new ScaleRender(imgWrapper, param);
wr = new WriteRender(sr, output, format);
wr.render();
} finally {
if (wr != null) {
wr.dispose();
}
}
}
void draw(ImageWrapper imgWrapper, DrawTextParameter param, File output, ImageFormat format) throws Exception {
WriteRender wr = null;
try {
ImageRender sr = new DrawTextRender(imgWrapper, param);
wr = new WriteRender(sr, output, format);
wr.render();
} finally {
if (wr != null) {
wr.dispose();
}
}
}
}