• About Me
  • Java基礎教學
  • 部落格聯播

JMagick-java ImageMagick取得圖片的長與寬

分類: Java, opensource, 影像處理, 程式 時間:2009/5/9 瀏覽:959 瀏覽數 — 留下回應

ImageMagick在壓縮圖形品質上真的很不錯,而且也可以在很多平台及程式語言上使用

不過在使用上並不像大家熟識的java 的imageio有那麼多資源,

原本是使用BufferedImage的getWidth()及getHeight()來取得圖的長與寬

不過讀取的Image會存放在java VM 暫存中,不能自行釋放,所以有時讀大量讀時會out of memory,

這時可以利用第三方套件ImageMagick來代替BufferedImage

一般利用BufferedImage取得長寬的方式大概如下


BufferedImage srcBufferImage = ImageIO.read(fi);
int width = srcBufferImage.getWidth();
int height = srcBufferImage.getHeight();
用JMagick則改寫成以下

if (System.getProperty("jmagick.systemclassloader") == null) {
System.setProperty("jmagick.systemclassloader", "no");
}
MagickImage magImage = null;
try {
java.io.File f = new java.io.File("圖檔名稱");
if (f.exists()) {
ImageInfo info = new ImageInfo(f.getAbsolutePath());
magImage = new MagickImage(info);

Dimension imageDim = magImage.getDimension();
int height = imageDim.height;
int width = imageDim.width;

}
} finally {
if (magImage != null) {
magImage.destroyImages();
}
}

或是寫成Function

public static int getWidth(String src) throws MagickException {
MagickImage magImage = null;
try {
ImageInfo info = new ImageInfo(src );
magImage = new MagickImage(info);
Dimension imageDim = magImage.getDimension();
return (int) imageDim.getWidth();
} finally {
if (magImage != null) {
magImage.destroyImages();
}
}
}

public static int getHeight(String src) throws MagickException {
MagickImage magImage = null;
try {
ImageInfo info = new ImageInfo(src );
magImage = new MagickImage(info);
Dimension imageDim = magImage.getDimension();
return (int) imageDim.getHeight();
} finally {
if (magImage != null) {
magImage.destroyImages();
}
}
}

試用的結果還算滿意,最少out of memory已經沒有在出現了

參考資料

JMagick-Java open source free影像壓縮


Related Posts Plugin for WordPress, Blogger...

留下您想說的話:

*