- 取得連結
- X
- 以電子郵件傳送
- 其他應用程式
ImageMagick-6.4.5-4-Q8-windows-dll.exe
使用小型PNG切圖時會有切完大小不正確的問題,
例如90x90的圖使用-crop 90x90+0+0切圖後,
會成為90x75,
雖然我知道-crop 90x90,可解決這個問題,
-crop WidthxHeight不適用於大圖裁切,
例如3200x2000的圖使用-crop 1600x1600,
裁切出來的圖會是檔案名稱-0~檔案名稱-N個檔案,
後來IM的官方論壇Bug區提出了一個很簡單的暫時替代方案,
就是先將PNG直接轉換成JPG後,再做處理,
convert 823185.png -resize 90x90 823185.jpg
convert 823185.jpg -gravity Center -crop 90x90+0+0 +repage tmp_1.jpg
del 823185.jpg
identify tmp_1.jpg
使用Jmagick時
使用小型PNG切圖時會有切完大小不正確的問題,
例如90x90的圖使用-crop 90x90+0+0切圖後,
會成為90x75,
雖然我知道-crop 90x90,可解決這個問題,
-crop WidthxHeight不適用於大圖裁切,
例如3200x2000的圖使用-crop 1600x1600,
裁切出來的圖會是檔案名稱-0~檔案名稱-N個檔案,
後來IM的官方論壇Bug區提出了一個很簡單的暫時替代方案,
就是先將PNG直接轉換成JPG後,再做處理,
convert 823185.png -resize 90x90 823185.jpg
convert 823185.jpg -gravity Center -crop 90x90+0+0 +repage tmp_1.jpg
del 823185.jpg
identify tmp_1.jpg
使用Jmagick時
//很重要,使用tomcat時沒加這行會找不到dll檔
System.setProperty("jmagick.systemclassloader","no");
ImageInfo info = new ImageInfo(src_file_path);
info.setQuality(getQuality());
info.setCompression(CompressionType.JPEGCompression);
info.setPreviewType(PreviewType.JPEGPreview);
MagickImage image = new MagickImage(info);
//判斷圖片為PNG,先做轉換
if(image.getImageFormat().equalsIgnoreCase("png")){
image.setFileName(dest_file_path);
image.writeImage(info);
info=new ImageInfo(dest_file_path);
info.setQuality(getQuality());
info.setCompression(CompressionType.JPEGCompression);
info.setPreviewType(PreviewType.JPEGPreview);
image = new MagickImage(info);
}
//再來圖片就任你處理了
MagickImage smaller=null;
//照計算過後的範圍切圖
Rectangle rt=new Rectangle(x,y,width,height);
smaller=image.cropImage(rt);
//或是要縮圖
smaller=smaller.scaleImage(width,height);
//或是逆時鐘旋轉90度
smaller=smaller.rotateImage(-90);
//或是順時鐘旋轉90度
smaller=smaller.rotateImage(90);
//或是垂直翻轉
smaller=smaller.flipImage();
//或是水平翻轉
smaller=smaller.flopImage();
//將縮圖存到實體檔案
smaller.setFileName(dest_file_path);
smaller.writeImage(info);
留言