package net.arnx.wmf2svg.util; //import java.awt.image.BufferedImage; //import java.awt.image.ColorConvertOp; //import java.awt.image.DataBuffer; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import and.awt.BufferedImage; import and.awt.ImageIO; //import javax.imageio.ImageIO; //import com.google.appengine.api.images.Image; //import com.google.appengine.api.images.ImagesService; //import com.google.appengine.api.images.ImagesServiceFactory; //import com.google.appengine.api.images.Transform; //import com.google.appengine.api.images.ImagesService.OutputEncoding; public class ImageUtil { private static Converter converter; static { converter = new ImageIOConverter(); } public static byte[] convert(byte[] image, String destType, boolean reverse) { if (converter == null) { throw new UnsupportedOperationException("Image Conversion API(Image IO or GAE Image API) is missing."); } return converter.convert(image, destType, reverse); } private static interface Converter { public byte[] convert(byte[] image, String destType, boolean reverse); } private static class ImageIOConverter implements Converter { public byte[] convert(byte[] image, String destType, boolean reverse) { if (destType == null) { throw new IllegalArgumentException("dest type is null."); } else { destType = destType.toLowerCase(); } byte[] outimage = image; // byte[] outimage = null; // try { // convert to 24bit color // BufferedImage bufferedImage = ImageIO.read(new ByteArrayInputStream(image)); // BufferedImage dst = new BufferedImage(bufferedImage.getWidth(), bufferedImage.getHeight(), BufferedImage.TYPE_3BYTE_BGR); // ColorConvertOp colorConvert = new ColorConvertOp(dst.getColorModel().getColorSpace(), null); // colorConvert.filter(bufferedImage, dst); // bufferedImage = dst; // if (reverse) { // DataBuffer srcData = bufferedImage.getRaster().getDataBuffer(); // BufferedImage dstImage = new BufferedImage(bufferedImage.getWidth(), bufferedImage.getHeight(), bufferedImage.getType()); // DataBuffer dstData = dstImage.getRaster().getDataBuffer(); // int lineSize = bufferedImage.getWidth() * bufferedImage.getColorModel().getPixelSize() / 8; // for (int h = 0, k = bufferedImage.getHeight() - 1; h < bufferedImage.getHeight(); h++, k--) { // for (int j = 0; j < lineSize; j++) { // dstData.setElem(h * lineSize + j, srcData.getElem(k * lineSize + j)); // } // } // bufferedImage = dstImage; // } // ByteArrayOutputStream out = new ByteArrayOutputStream(); // ImageIO.write(bufferedImage, destType, out); // outimage = out.toByteArray(); // } catch (IOException e) { // // never occurred. // } return outimage; } } // private static class GAEConverter implements Converter { // public byte[] convert(byte[] image, String destType, boolean reverse) { // if (destType == null) { // throw new IllegalArgumentException("dest type is null."); // } else { // destType = destType.toLowerCase(); // } // // ImagesService.OutputEncoding encoding = null; // if ("png".equals(destType)) { // encoding = OutputEncoding.PNG; // } else if ("jpeg".equals(destType)) { // encoding = OutputEncoding.JPEG; // } else { // throw new UnsupportedOperationException("unsupported image encoding: " + destType); // } // // ImagesService imagesService = ImagesServiceFactory.getImagesService(); // Image bmp = ImagesServiceFactory.makeImage(image); // // Transform t = (reverse) ? ImagesServiceFactory.makeVerticalFlip() : ImagesServiceFactory.makeCompositeTransform(); // return imagesService.applyTransform(t, bmp, encoding).getImageData(); // } // } }