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);