package mir.misc; /** * Title: * Description: * Copyright: Copyright (c) 2001 * Company: Indymedia * @author * @version 1.0 */ import java.io.*; //import java.awt.image.renderable.ParameterBlock; import java.awt.Dimension; import java.awt.Rectangle; import magick.*; public class WebdbImage { private Logfile theLog = Logfile.getInstance(MirConfig.getPropWithHome("HTMLTemplateProcessor.Logfile")); // imageTypes public final static int WEBDB_JPG=0; public final static int WEBDB_GIF=1; // default values for scaling private int maxIconSize=120; private int maxImageSize=640; private byte[] iconData; private byte[] imageData; private int imageType; private int iconWidth; private int iconHeight; // internal representation of the image private MagickImage magickImage; // constructor public WebdbImage(byte[] image, int type) throws IOException { imageType=type; try { magickImage = new MagickImage(new ImageInfo(), image); } catch (MagickException e) {theLog.printDebugInfo("fail: "+e.toString());} scaleImage(); } public WebdbImage(byte[] image, int type, int iconMax) throws IOException { imageType=type; maxIconSize=iconMax; try { magickImage = new MagickImage(new ImageInfo(), image); } catch (MagickException e) {theLog.printDebugInfo("fail: "+e.toString());} scaleImage(); } public WebdbImage(byte[] image, int type, int iconMax, int imageMax) throws IOException { imageType=type; maxIconSize=iconMax; maxImageSize=imageMax; try { magickImage = new MagickImage(new ImageInfo(), image); } catch (MagickException e) {theLog.printDebugInfo("fail: "+e.toString());} scaleImage(); } // acc3ssor-methods public int getIconWidth() throws IOException { if (iconData==null) scaleIcon(); return iconWidth; } public int getIconHeight() throws IOException { if (iconData==null) scaleIcon(); return iconHeight; } public int getImageWidth() { try { return (int)magickImage.getDimension().getWidth(); } catch (MagickException e) { return -1;} } public int getImageHeight() { int gg; try { return (int)magickImage.getDimension().getHeight(); } catch (MagickException e) { return -1;} } public byte[] getImage() { if (imageData==null) { try { ImageInfo imageInfo = new ImageInfo(); imageInfo.init(); switch (imageType) { case WEBDB_JPG: imageInfo.setMagickMember("JPG"); case WEBDB_GIF: imageInfo.setMagickMember("JPG"); } imageData = magickImage.imageToBlob(imageInfo); } catch (MagickException e) { theLog.printDebugInfo("getImage: magick "+e.toString()); } } return imageData; } public byte[] getIcon() throws IOException { if (iconData == null) scaleIcon(); return iconData; } private void scaleImage() throws java.io.IOException { if (maxImageSize>0 && ( getImageHeight()> maxImageSize|| getImageWidth() >maxImageSize)) { float scale; if (getImageHeight() > getImageWidth()) scale = (float)maxImageSize / (float)getImageHeight(); else scale = (float)maxImageSize / (float)getImageWidth(); try { magickImage = magickImage.scaleImage((int)scale*getImageWidth(), (int)scale*getImageHeight()); } catch (MagickException e) {} } } private void scaleIcon() throws java.io.IOException { if (iconData==null) { float scale; if (getImageHeight() > getImageWidth()) scale = (float)maxIconSize / (float)getImageHeight(); else scale = (float)maxIconSize / (float)getImageWidth(); try { MagickImage temp = magickImage.scaleImage((int)(scale*getImageWidth()), (int)(scale*getImageHeight())); ImageInfo imageInfo = new ImageInfo(); imageInfo.init(); /** @todo gif */ switch (imageType) { case WEBDB_JPG: imageInfo.setMagickMember("JPG"); case WEBDB_GIF: imageInfo.setMagickMember("JPG"); } iconWidth=(int)temp.getDimension().getWidth(); iconHeight=(int)temp.getDimension().getHeight(); // Put a black rectangle around the border DrawInfo drawInfo = new DrawInfo(imageInfo); drawInfo.setPrimitive("Rectangle 0 0 "+(iconWidth-1)+" "+(iconHeight-1)); drawInfo.setStroke(PixelPacket.queryColorDatabase("black")); temp.drawImage(drawInfo); iconData = temp.imageToBlob(imageInfo); } catch (MagickException e) {} } } }