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