2011-03-01 149 views
19

如何通過ImageMagick從java中修改圖像?有沒有辦法做到這一點?Image magick java

+1

請在問題中添加問號(?)。請在每個句子的開頭使用大寫字母。這段文字在所有小寫字母中閱讀都很痛苦。通過'修改'可以更具體地說明你的意思。至於調整大小(甚至結束加水印),可以使用Java 2D(在J2SE中)完成 - 無需第三方API。唯一需要注意的是J2SE提供的圖像文件類型範圍有限。 (如果你想處理像TIFF這樣的圖像類型,我會推薦JAI。) – 2011-03-01 06:26:59

+0

@Andrew Thompson:完成。是的,你可以使用JAI。我已經使用了ImageMagick和JAI。我爲什麼要避免JAI,主要有兩個問題。 (1)圖像質量嚴重下降,特別是在重度縮小的情況下。有很多參數需要了解才能獲得正確的質量。 (2)使用起來不容易。 – Nishant 2011-03-01 07:10:03

回答

18

使用JMagickdocs)。閱讀文檔。它提供了ImageMagick的所有功能。你也可以看看另一個ImageMagick Java包裝器,im4java

沒有爲im4java here


這裏良好的起動文件就是一個例子,我已經工作了。

/** Typical scaling implementation using JMagick **/ 
ImageInfo origInfo = new ImageInfo(absPath); //load image info 
MagickImage image = new MagickImage(origInfo); //load image 
image = image.scaleImage(finalWidth, finalHeight); //to Scale image 
image.setFileName(absNewFilePath); //give new location 
image.writeImage(origInfo); //save 

編輯#1:

如果你想知道的JMagick的JAR文件。下載jMagick tarball,解壓縮它。

$ tar xvzf jmagick-linux-6.4.0-Q32.tar.gz 
./jmagick-6.4.0.jar 
./jmagick.jar 
./libJMagick-6.4.0.so 
./libJMagick.so 
+0

@nishant感謝你的幫助,你可以舉一個例子,其中imagemagick與java一起使用.... – 2011-03-01 05:00:22

+0

@rahul偉大的:你想要一些代碼?最常見的用途是圖像大小調整和水印。 – Nishant 2011-03-01 05:02:37

+0

@nishant yaaa我想調整圖像大小。請發佈它非常感謝你的幫助 – 2011-03-01 05:16:50

0

調整圖像大小(使用最簡單的法)J2SE內。

import java.awt.Graphics; 
import java.awt.image.BufferedImage; 
import javax.swing.*; 
import javax.imageio.ImageIO; 
import java.net.URL; 

class ResizeImage { 

    public static void main(String[] args) throws Exception { 
     URL url = new URL("http://pscode.org/media/citymorn2.jpg"); 
     final BufferedImage bi = ImageIO.read(url); 

     Runnable r = new Runnable() { 
      public void run() { 
       JLabel unresize = new JLabel(new ImageIcon(bi)); 

       int width = (int)(bi.getWidth()*.75); 
       int height = (int)(bi.getHeight()*.75); 

       BufferedImage bi1 = new BufferedImage(width, height, 
        BufferedImage.TYPE_INT_RGB); 
       Graphics g1 = bi1.getGraphics(); 
       g1.drawImage(bi, 0, 0, width, height, null); 
       JLabel easyResize = new JLabel(new ImageIcon(bi1)); 

       JPanel p = new JPanel(); 
       p.add(unresize); 
       p.add(easyResize); 

       JOptionPane.showMessageDialog(null, p); 
      } 
     }; 
     SwingUtilities.invokeLater(r); 
    } 
} 
+0

現在你會如何將這個調整大小的圖像存儲到磁盤? – 2013-10-29 16:39:24

6

如何在Windows上安裝JMajick

  1. 轉到http://downloads.jmagick.org/6.3.9/(或任何其他版本的選擇)
  2. 下載的ImageMagick-6.3.9-0-Q8-Windows的dll.exe和jmagick-win-6.3.9-Q8.zip。
  3. 安裝exe文件。這將安裝ImageMagick,這是JMagick工作的先決條件。
  4. 現在提取zip文件。這會給jmagick.dll和jmagick.jar。
  5. 將jmagick.jar複製到lib文件夾並將其包含在類路徑中。
  6. 將jmagick.dll複製到ImageMagic的根安裝目錄,並將其作爲條目添加到PATH環境變量中。
  7. JMagick安裝:)。
+2

這太好了!我遇到了一個例外(使用Windows 7)「UnsatisfiedLinkError」,直到我保留了'jmagick.dll'在我的JRE_HOME/bin中,並且需要系統重啓以及加載dll。 – tusar 2012-01-03 07:47:26

2

對於ImageMagic 1.4.0

// create command 
ConvertCmd cmd = new ConvertCmd(); 

// create the operation, add images and operators/options 
IMOperation op = new IMOperation(); 
op.addImage("source_picture.jpg"); // source file 
op.resize(800,600); 
// of op.resize(800); // and height calculate automatically 
op.addImage("resized_picture.jpg"); // destination file file 

// execute the operation 
cmd.run(op); 

,如果你喜歡行家!

<dependency> 
    <groupId>org.im4java</groupId> 
    <artifactId>im4java</artifactId> 
    <version>1.4.0</version> 
</dependency> 
+0

如何模仿'convert my_image.jpg pdf_version.pdf'? – mmcrae 2015-04-02 18:31:26

+0

我不確定。它很久以前就用它了。但我認爲你可以簡單地刪除resize()並將resized_picture.jpg更改爲pdf_version.pdf – user1079877 2015-04-05 12:39:01

0

我試圖使用ImageMagick從Java卻發現硬件加速100%的Java庫,用於圖像操作。

https://github.com/thebuzzmedia/imgscalr

「此庫由Java2D的團隊,提供在大多數平臺上的硬件加速行動倡導高效的Java2D縮放技術的使用。」