package com.alibaba.simpleimage; import java.awt.color.ColorSpace; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import javax.imageio.ImageIO; import org.apache.commons.io.IOUtils; import com.alibaba.simpleimage.render.DrawTextParameter; import com.alibaba.simpleimage.render.DrawTextRender; import com.alibaba.simpleimage.render.FixDrawTextItem; import com.alibaba.simpleimage.render.ReadRender; import com.alibaba.simpleimage.render.ScaleParameter; import com.alibaba.simpleimage.render.ScaleRender; import com.alibaba.simpleimage.render.WriteRender; public class FullStackTest extends BaseTest { static File path = new File("./src/test/resources/conf.test/simpleimage"); public void doDrawScaleWrite(String dirName, String sourceName, String destName) throws Exception { // read InputStream in = null; OutputStream output = null; ImageRender wr = null; File dir = new File(path, dirName); File resultFile = new File(resultDir, destName); try { File f = new File(dir, sourceName); in = new FileInputStream(f); ReadRender rr = new ReadRender(in); DrawTextParameter dp = new DrawTextParameter(); dp.addTextInfo(new FixDrawTextItem("1234554321")); DrawTextRender dtr = new DrawTextRender(rr, dp); // scale ScaleParameter param = new ScaleParameter(1024, 1024, ScaleParameter.Algorithm.AUTO); ImageRender sr = new ScaleRender(dtr, param); output = new FileOutputStream(resultFile); ImageFormat outputFormat = sourceName.endsWith("gif") ? ImageFormat.GIF : ImageFormat.JPEG; wr = new WriteRender(sr, output, outputFormat); wr.render(); } finally { if (wr != null) { wr.dispose(); } IOUtils.closeQuietly(output); IOUtils.closeQuietly(in); } doCheckResult(resultFile); } public void testConvertDrawScaleGIF() throws Exception { doDrawScaleWrite("gif", "GIF89a_1.gif", "GIF89-result.gif"); doDrawScaleWrite("gif", "model.gif", "model-result.gif"); doDrawScaleWrite("gif", "super1_gif.gif", "super1-result.gif"); doDrawScaleWrite("gif", "super2_gif.gif", "super2-result.gif"); } public void testConvertDrawScaleTIFF() throws Exception { doDrawScaleWrite("tiff", "input_16_matte.tiff", "input_16_matte-result.jpg"); doDrawScaleWrite("tiff", "input_16.tiff", "input_16-result.jpg"); doDrawScaleWrite("tiff", "input_256_planar_contig.tiff", "input_256_planar_contig-result.jpg"); doDrawScaleWrite("tiff", "input_256_planar_separate.tiff", "input_256_planar_separate-result.jpg"); doDrawScaleWrite("tiff", "input_256.tiff", "input_256-result.jpg"); doDrawScaleWrite("tiff", "input_gray_4bit.tiff", "input_gray_4bit-result.jpg"); doDrawScaleWrite("tiff", "input_gray_8bit.tiff", "input_gray_8bit-result.jpg"); doDrawScaleWrite("tiff", "input_truecolor_stripped.tiff", "input_truecolor_stripped-result.jpg"); doDrawScaleWrite("tiff", "input_truecolor_tiled32x32.tiff", "input_truecolor_tiled32x32-result.jpg"); doDrawScaleWrite("tiff", "input_truecolor.tiff", "input_truecolor-result.jpg"); } public void testConvertDrawScalePNG() throws Exception { doDrawScaleWrite("png", "input_256.png", "input_256png-result.jpg"); doDrawScaleWrite("png", "super1_png.png", "super1_png-result.jpg"); doDrawScaleWrite("png", "super2_png.png", "super2_png-result.jpg"); doDrawScaleWrite("png", "input_bw.png", "input_bwpng-result.jpg"); doDrawScaleWrite("png", "input_mono.png", "input_monopng-result.jpg"); doDrawScaleWrite("png", "input_truecolor.png", "input_truecolorpng-result.jpg"); } public void testConvertDrawScaleBMP() throws Exception { doDrawScaleWrite("bmp", "normal.bmp", "normal_bmp-result.jpg"); doDrawScaleWrite("bmp", "super1_bmp.bmp", "super1_bmp-result.jpg"); doDrawScaleWrite("bmp", "super2_bmp.bmp", "super2_bmp-result.jpg"); } public void testBandsError() throws Exception { // 这张图片转换颜色空间失败,会从彩色照片转为黑白照片,原因是JAI认为该图片的ColorSpace的TYPE为灰度 // doDrawScaleWrite("tiff", "input_256_matte.tiff", "input_256_matte-result.jpg"); doDrawScaleWrite("tiff", "input_gray_8bit_matte.tiff", "input_gray_8bit_matte-result.jpg"); } public void testBaselineLimtiedError() throws Exception { doDrawScaleWrite("tiff", "input_gray_12bit.tiff", "input_gray_12bit-result.jpg"); doDrawScaleWrite("tiff", "input_gray_16bit.tiff", "input_gray_16bit-result.jpg"); doDrawScaleWrite("tiff", "input_truecolor_16.tiff", "input_truecolor_16-result.jpg"); doDrawScaleWrite("png", "input_16.png", "input_16png-result.jpg"); } public void testDrawScaleWriteJpeg() throws Exception { doDrawScaleWrite("cmyk", "cmyk_noprofile_1.jpg", "cmyk_noprofile_1-result.jpg"); doDrawScaleWrite("cmyk", "cmyk_noprofile_2.jpg", "ccmyk_noprofile_2-result.jpg"); doDrawScaleWrite("cmyk", "cmyk_noprofile_3.jpg", "cmyk_noprofile_3-result.jpg"); doDrawScaleWrite("cmyk", "ycck_embedprofile_1.jpg", "ycck_embedprofile_1-result.jpg"); doDrawScaleWrite("cmyk", "ycck_embedprofile_2.jpg", "ycck_embedprofile_2-result.jpg"); doDrawScaleWrite("cmyk", "ycck_noprofile.jpg", "ycck_noprofile-result.jpg"); doDrawScaleWrite("malformed", "datadamge.jpg", "datadamge-result.jpg"); doDrawScaleWrite("malformed", "huffcodeerror.jpg", "huffcodeerror-result.jpg"); doDrawScaleWrite("malformed", "prematureend.jpg", "prematureend-result.jpg"); doDrawScaleWrite("malformed", "unknownmarker.jpg", "unknownmarker-result.jpg"); doDrawScaleWrite("quality", "quality_80.jpg", "quality_80-result.jpg"); doDrawScaleWrite("quality", "quality_90.jpg", "quality_90-result.jpg"); doDrawScaleWrite("quality", "quality_95.jpg", "quality_95-result.jpg"); doDrawScaleWrite("quality", "seq_1x1_1x1_1x1.jpg", "seq_1x1_1x1_1x1-result.jpg"); doDrawScaleWrite("quality", "seq_1x2_1x1_1x1.jpg", "seq_1x2_1x1_1x1-result.jpg"); doDrawScaleWrite("quality", "seq_2x1_1x1_1x1.jpg", "seq_2x1_1x1_1x1-result.jpg"); doDrawScaleWrite("quality", "seq_2x2_1x1_1x1.jpg", "seq_2x2_1x1_1x1-result.jpg"); doDrawScaleWrite("rgb", "adobe_RGB_1998.jpg", "adobe_RGB_1998-result.jpg"); doDrawScaleWrite("rgb", "Apple_RGB.jpg", "Apple_RGB-result.jpg"); doDrawScaleWrite("rgb", "CIE_RGB.jpg", "CIE_RGB-result.jpg"); doDrawScaleWrite("rgb", "ColorMatch_RGB.jpg", "ColorMatch_RGB-result.jpg"); doDrawScaleWrite("rgb", "e_sRGB.jpg", "e_sRGB-result.jpg"); doDrawScaleWrite("rgb", "ProPhoto_RGB.jpg", "ProPhoto_RGB-result.jpg"); doDrawScaleWrite("rgb", "KODAK_DC_Series_Digtal_Camera.jpg", "KODAK_DC_Series_Digtal_Camera-result.jpg"); doDrawScaleWrite("rgb", "PAL-SECAM.jpg", "PAL-SECAM-result.jpg"); doDrawScaleWrite("rgb", "RICOH_RUSSIAN-SC_040402.jpg", "RICOH_RUSSIAN-SC_040402-result.jpg"); // doDrawScaleWrite("ROMM-RGB.jpg", "ROMM-RGB-result.jpg"); doDrawScaleWrite("rgb", "SMPTE-C.jpg", "SMPTE-C-result.jpg"); doDrawScaleWrite("rgb", "sRGB_IEC61966-2.1.jpg", "sRGB_IEC61966-2.1-result.jpg"); doDrawScaleWrite("rgb", "Wide_Gamut_RGB.jpg", "Wide_Gamut_RGB-result.jpg"); } public void doCheckResult(File imgFile) throws Exception { BufferedImage img = ImageIO.read(imgFile); if (img.getWidth() > 1024 || img.getHeight() > 1024) assertTrue(img.toString() + " widht or height is illegal", false); if (img.getColorModel().getColorSpace().getType() != ColorSpace.TYPE_RGB) { assertTrue(img.toString() + " colorspace is illegal", false); } } }