JSP高清缩略图JMagick使用,实现了对图片的多种操作,合成图片,缩略图、复制数据等等...。
首先下载:
http://downloads.jmagick.org/6.3.9/ImageMagick-6.3.9-0-Q16-windows-dll.exe
http://downloads.jmagick.org/6.3.9/jmagick-win-6.3.9-Q16.zip
安装ImageMagick-6.3.9-0-Q16-windows-dll.exe程序在F盘如:F:/ImageMagick可以自由选择。然后配置环境Path加入ImageMagick的安装目录;F:/ImageMagick。
解压jmagick-win-6.3.9-Q16.zip,将jmagick-win-6.3.9-Q16.zip里的jmagick.jar。放到TOMCAT安装目录/lib/里和Java安装目录/jdk/jre/lib/ext/里。再把jmagick.dll 放到TOMCAT安装目录/bin/目录下就ok了。以下是封装BEAN对图片缩放剪切代码:
Jmagick.java
package Image; import magick.*; import java.awt.*; public class Jmagick { //图片缩放 public void Jwh(String URLPath ,String srcImage, String DestImage, int WLen, int HLen){ MagickImage scaled = null; Rectangle rect = null; int x=0; int y=0; int lw=0; int lh=0; try{ ImageInfo info = new ImageInfo(URLPath+srcImage); MagickImage image = new MagickImage(info); //取长宽 Dimension dim = image.getDimension(); double wImage = dim.getWidth(); double hImage = dim.getHeight(); if (HLen==0) { //正常缩小 Boolean bWBig = wImage > hImage? true:false ; if (bWBig) {//长大过高 hImage = WLen * ( hImage / wImage); wImage = WLen; } else {//反之 wImage = WLen * ( wImage / hImage); hImage = WLen; } } else {//剪切缩小 Boolean bWBig = wImage-WLen < hImage-HLen? true:false ; if (bWBig) {//长大过高 hImage = WLen * ( hImage / wImage); wImage = WLen; } else {//反之 wImage = HLen * ( wImage / hImage); hImage = HLen; } } lw=(int)wImage; lh=(int)hImage; //输出 scaled = image.scaleImage(lw, lh); if (HLen>0) {//剪切缩小必须是JPG格式 x=(lw-WLen)/2; y=(lh-HLen)/2; lw=lw-(lw-WLen); lh=lh-(lh-HLen); rect = new Rectangle(x, y, lw, lh); scaled = scaled.cropImage(rect); } scaled.setFileName(URLPath+DestImage); scaled.writeImage(info); scaled.destroyImages(); }catch(MagickApiException ex){ }catch(MagickException ex){ } finally { scaled.destroyImages(); } } }
编译后Jmagick.class放在/WEB-INF/classes/Image/文件夹下
使用方式:
String Path="/1.gif"; String PathS="/12.gif"; int Ww=100; int Hh=0; //设置Hh高度为0的时候是按图片的宽度比例缩放图片,设置图片Hh大于0以上就按指定大小图片比例剪切为不变形的缩放图片。 Image.Jmagick Jmagick=new Image.Jmagick(); Jmagick.Jwh(getServletContext().getRealPath("/"),Path,PathS,Ww,Hh);