Java tutorial
/** * * Copyright (c) 2014, the Railo Company Ltd. All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see <http://www.gnu.org/licenses/>. * **/ package lucee.runtime.img; import java.awt.image.BufferedImage; import java.awt.image.ColorModel; import java.awt.image.IndexColorModel; import java.io.IOException; import javax.imageio.stream.ImageInputStream; import lucee.commons.io.IOUtil; import lucee.commons.io.res.Resource; import lucee.commons.io.res.util.ResourceUtil; import lucee.commons.lang.StringUtil; import lucee.runtime.img.coder.Coder; import org.apache.commons.codec.binary.Base64; public class ImageUtil { private static Coder coder; static { coder = Coder.getInstance(); } public static String[] getWriterFormatNames() { return coder.getWriterFormatNames(); } public static String[] getReaderFormatNames() { return coder.getReaderFormatNames(); } /** * translate a file resource to a buffered image * @param res * @return * @throws IOException */ public static BufferedImage toBufferedImage(Resource res, String format) throws IOException { return coder.toBufferedImage(res, format); } /** * translate a binary array to a buffered image * @param binary * @return * @throws IOException */ public static BufferedImage toBufferedImage(byte[] bytes, String format) throws IOException { return coder.toBufferedImage(bytes, format); } public static byte[] readBase64(String b64str, StringBuilder mimetype) throws IOException { if (StringUtil.isEmpty(b64str)) throw new IOException("base64 string is empty"); // data:image/png;base64, int index = b64str.indexOf("base64,"); if (index != -1) { int semiIndex = b64str.indexOf(";"); if (mimetype != null && semiIndex < index && StringUtil.startsWithIgnoreCase(b64str, "data:")) { mimetype.append(b64str.substring(5, semiIndex).trim()); } b64str = b64str.substring(index + 7); } return Base64.decodeBase64(b64str.getBytes()); } public static String getFormat(Resource res) throws IOException { String ext = getFormatFromExtension(res, null); if (ext != null) return ext; String mt = ResourceUtil.getMimeType(res, null); if (mt == null) return null;//throw new IOException("can't extract mimetype from ["+res+"]"); return getFormatFromMimeType(mt); } public static String getFormat(byte[] binary) throws IOException { return getFormatFromMimeType(IOUtil.getMimeType(binary, "")); } public static String getFormat(byte[] binary, String defaultValue) { return getFormatFromMimeType(IOUtil.getMimeType(binary, ""), defaultValue); } public static String getFormatFromExtension(Resource res, String defaultValue) { String ext = ResourceUtil.getExtension(res, null); if ("gif".equalsIgnoreCase(ext)) return "gif"; if ("jpg".equalsIgnoreCase(ext)) return "jpg"; if ("jpe".equalsIgnoreCase(ext)) return "jpg"; if ("jpeg".equalsIgnoreCase(ext)) return "jpg"; if ("png".equalsIgnoreCase(ext)) return "png"; if ("tiff".equalsIgnoreCase(ext)) return "tiff"; if ("tif".equalsIgnoreCase(ext)) return "tiff"; if ("bmp".equalsIgnoreCase(ext)) return "bmp"; if ("bmp".equalsIgnoreCase(ext)) return "bmp"; if ("wbmp".equalsIgnoreCase(ext)) return "wbmp"; if ("ico".equalsIgnoreCase(ext)) return "bmp"; if ("wbmp".equalsIgnoreCase(ext)) return "wbmp"; if ("psd".equalsIgnoreCase(ext)) return "psd"; if ("fpx".equalsIgnoreCase(ext)) return "fpx"; if ("pnm".equalsIgnoreCase(ext)) return "pnm"; if ("pgm".equalsIgnoreCase(ext)) return "pgm"; if ("pbm".equalsIgnoreCase(ext)) return "pbm"; if ("ppm".equalsIgnoreCase(ext)) return "ppm"; return defaultValue; } public static String getFormatFromMimeType(String mt) throws IOException { String format = getFormatFromMimeType(mt, null); if (format != null) return format; if (StringUtil.isEmpty(mt)) throw new IOException("cannot find Format of given image");//31 throw new IOException("can't find Format (" + mt + ") of given image"); } public static String getFormatFromMimeType(String mt, String defaultValue) { if ("image/gif".equals(mt)) return "gif"; if ("image/gi_".equals(mt)) return "gif"; if ("image/jpeg".equals(mt)) return "jpg"; if ("image/jpg".equals(mt)) return "jpg"; if ("image/jpe".equals(mt)) return "jpg"; if ("image/pjpeg".equals(mt)) return "jpg"; if ("image/vnd.swiftview-jpeg".equals(mt)) return "jpg"; if ("image/pipeg".equals(mt)) return "jpg"; if ("application/x-jpg".equals(mt)) return "jpg"; if ("application/jpg".equals(mt)) return "jpg"; if ("image/jp_".equals(mt)) return "jpg"; if ("image/png".equals(mt)) return "png"; if ("image/x-png".equals(mt)) return "png"; if ("application/x-png".equals(mt)) return "png"; if ("application/png".equals(mt)) return "png"; if ("image/tiff".equals(mt)) return "tiff"; if ("image/tif".equals(mt)) return "tiff"; if ("image/x-tif".equals(mt)) return "tiff"; if ("image/x-tiff".equals(mt)) return "tiff"; if ("application/tif".equals(mt)) return "tiff"; if ("application/x-tif".equals(mt)) return "tiff"; if ("application/tiff".equals(mt)) return "tiff"; if ("application/x-tiff".equals(mt)) return "tiff"; if ("image/bmp".equals(mt)) return "bmp"; if ("image/vnd.wap.wbmp".equals(mt)) return "wbmp"; if ("image/fpx".equals(mt)) return "fpx"; if ("image/x-fpx".equals(mt)) return "fpx"; if ("image/vnd.fpx".equals(mt)) return "fpx"; if ("image/vnd.netfpx".equals(mt)) return "fpx"; if ("image/vnd.fpx".equals(mt)) return "fpx"; if ("application/vnd.netfpx".equals(mt)) return "fpx"; if ("application/vnd.fpx".equals(mt)) return "fpx"; if ("image/x-portable-anymap".equals(mt)) return "pnm"; if ("image/x-portable/anymap".equals(mt)) return "pnm"; if ("image/x-pnm".equals(mt)) return "pnm"; if ("image/pnm".equals(mt)) return "pnm"; if ("image/x-portable-graymap".equals(mt)) return "pgm"; if ("image/x-portable/graymap".equals(mt)) return "pgm"; if ("image/x-pgm".equals(mt)) return "pgm"; if ("image/pgm".equals(mt)) return "pgm"; if ("image/portable bitmap".equals(mt)) return "pbm"; if ("image/x-portable-bitmap".equals(mt)) return "pbm"; if ("image/x-portable/bitmap".equals(mt)) return "pbm"; if ("image/x-pbm".equals(mt)) return "pbm"; if ("image/pbm".equals(mt)) return "pbm"; if ("image/x-portable-pixmap".equals(mt)) return "ppm"; if ("application/ppm".equals(mt)) return "ppm"; if ("application/x-ppm".equals(mt)) return "ppm"; if ("image/x-p".equals(mt)) return "ppm"; if ("image/x-ppm".equals(mt)) return "ppm"; if ("image/ppm".equals(mt)) return "ppm"; if ("image/ico".equals(mt)) return "ico"; if ("image/x-icon".equals(mt)) return "ico"; if ("application/ico".equals(mt)) return "ico"; if ("application/x-ico".equals(mt)) return "ico"; if ("image/photoshop".equals(mt)) return "psd"; if ("image/x-photoshop".equals(mt)) return "psd"; if ("image/psd".equals(mt)) return "psd"; if ("application/photoshop".equals(mt)) return "psd"; if ("application/psd".equals(mt)) return "psd"; if ("zz-application/zz-winassoc-psd".equals(mt)) return "psd"; // can not terminate this types exactly // image/x-xbitmap // application/x-win-bitmap // image/x-win-bitmap // application/octet-stream return defaultValue; } public static String getMimeTypeFromFormat(String mt) throws IOException { if ("gif".equals(mt)) return "image/gif"; if ("jpeg".equals(mt)) return "image/jpg"; if ("jpg".equals(mt)) return "image/jpg"; if ("jpe".equals(mt)) return "image/jpg"; if ("png".equals(mt)) return "image/png"; if ("tiff".equals(mt)) return "image/tiff"; if ("tif".equals(mt)) return "image/tiff"; if ("bmp".equals(mt)) return "image/bmp"; if ("bmp".equals(mt)) return "image/bmp"; if ("wbmp".equals(mt)) return "image/vnd.wap.wbmp"; if ("fpx".equals(mt)) return "image/fpx"; if ("pgm".equals(mt)) return "image/x-portable-graymap"; if ("pnm".equals(mt)) return "image/x-portable-anymap"; if ("pbm".equals(mt)) return "image/x-portable-bitmap"; if ("ppm".equals(mt)) return "image/x-portable-pixmap"; if ("ico".equals(mt)) return "image/ico"; if ("psd".equals(mt)) return "image/psd"; if (StringUtil.isEmpty(mt)) throw new IOException("can't find Format of given image");//31 throw new IOException("can't find Format (" + mt + ") of given image"); } public static void closeEL(ImageInputStream iis) { try { if (iis != null) iis.close(); } catch (Throwable t) { } } public static BufferedImage createBufferedImage(BufferedImage image, int columns, int rows) { ColorModel colormodel = image.getColorModel(); BufferedImage newImage; if (colormodel instanceof IndexColorModel) { if (colormodel.getTransparency() != 1) newImage = new BufferedImage(columns, rows, 2); else newImage = new BufferedImage(columns, rows, 1); } else { newImage = new BufferedImage(colormodel, image.getRaster().createCompatibleWritableRaster(columns, rows), colormodel.isAlphaPremultiplied(), null); } return newImage; } public static BufferedImage createBufferedImage(BufferedImage image) { return createBufferedImage(image, image.getWidth(), image.getHeight()); } }