使用ImageMagick & Jmagick

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時


//很重要,使用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);

 
 

留言