NetBeans で JMagick をつかってみよう(できない)

magic でなく magick なんだな.

JMagick とは

ImageMagick という画像処理ソフトがあって,これを JAVA で利用できるようにしたよ!というソフトが JMagick.

JMagick is an open source Java interface of ImageMagick. It is implemented in the form of Java Native Interface (JNI) into the ImageMagick API.

http://www.jmagick.org/index.html

画像処理については

  • java.awt.Image
  • javax.imageio.ImageIO
  • javax.media.jai

とかがある.JMagick を選択するメリットは多機能性らしい.たとえば,読み書きできるファイル形式の数が段違いだし.高速処理できるかどうかは知らない.

入手方法

http://www.jmagick.org/index.html から downloads,downloads.jmagick.org,6.3.9, ImageMagick-6.3.9-0-Q8-windows-dll.exe と辿ればよい.jmagick-win-6.3.9-Q8.zip も入手する.最新版の6.4.0を選んでいないのは,Windows インストーラがないから.コンパイルとか面倒そうだから,旧版を扱う.またQ8,Q16の違いは,画素値を何ビットで量子化するかとのこと.さらに static-link,dynamic-link の2系統あるが,後者を選択すればよいらしい

インストール

ImageMagick のインストール

ImageMagick-6.3.9-0-Q8-windows-dll.exe を実行し,ほいほい進める.Install development headers and libraries for C and C++C/C++ 開発用ヘッダ・ライブラリを入れるか?という問いだろう.使わないからオフのまま進めた.また,デスクトップアイコンを作らせない.

JMagick のセットアップ

jmagick-win-6.3.9-Q8.zip には jar と dll が入っている.適当に展開する.ここでは D:\Develop\JMagick に展開した.

テストプログラム

  1. NetBeans 起動
  2. ツール,ライブラリ,新規ライブラリ「JMagick」
    • クラスパス,JAR/フォルダを追加「D:\Develop\JMagick\jmagick.jar」
  3. 新規プロジェクト
    • JavaJava アプリケーション
    • プロジェクト名「test」
    • プロジェクトの場所「... \NetBeansProjects\JMagick」
  4. プロジェクトプロパティ
    • ライブラリ,コンパイル,ライブラリを追加「JMagick」
  5. DLLファイルをインポート
    • 方法不詳.詰まった.

現況

DLL インポートができないから詰まっている.後で示すコード中の ImageInfo() でこける.NetBeans の出力は

debug:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no JMagick in java.library.path
        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1709)
        at java.lang.Runtime.loadLibrary0(Runtime.java:823)
        at java.lang.System.loadLibrary(System.java:1030)
        at magick.MagickLoader.<clinit>(MagickLoader.java:13)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at java.lang.Class.newInstance0(Class.java:355)
        at java.lang.Class.newInstance(Class.java:308)
        at magick.Magick.<clinit>(Magick.java:21)
        at test.Main.main(Main.java:24)
Java Result: 1
構築成功 (合計時間: 5 秒)

となっている.

Main.java
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package test;
import magick.ImageInfo;
import magick.MagickException;
import magick.MagickImage;


/**
 *
 * @author guernsey
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
		ImageInfo ii;
		try {
			ii = new ImageInfo("label:hoge@hoge.hoge.com");
	        /* フォント指定 */
	        ii.setFont("c:\\windows\\fonts\\msgothic.ttc");
	        /* ポイントサイズ指定 */
	        ii.setPointSize(30);

	        /* ラベルに合わせて文字列画像を作成 */
	        MagickImage mi = new MagickImage(ii);

	        mi.setFileName("sample.png");
	        mi.writeImage(new ImageInfo());
		} catch (MagickException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		}
        // TODO code application logic here
    }

}