JMagickのWindows64bit版が無くて皆さん苦労しているみたいなのでちょいと作ってみることに。
ちなみにImageMagickのVer7に対応するJMagickのソースは無いようです。
** 注意 **
ImageMagickの6.9.8の場合、JMagickは6.6.9を使う必要があります。
JMagick7だとJNIの関数が大きく変わっているので、かなり不安定な動きをします。
作業一覧
- Visual Studioのインストール
- ImageMagickのインストール
- JavaのJNI関係のインストール
- JMagickの作成
- EclipseでJMagickの動作確認
用意するもの
- Visual Studio
- Eclipse
- pleiades all in one 使用したのは”pleiades-e4.4-ultimate-jre_20130625”
- ImageMagickソース
- ImageMagickのサイトからダウンロードしたImageMagick-6.9.8-0.zip
- JMagickソース
- githubからチェックアウトしてくる
Visual Studio2017のインストール
ImageMagick,JMagickのコンパイルのために使います。
https://www.microsoft.com/ja-jp/dev/campaign/free-edition.aspx
Visual Studio Communityのダウンロード
https://www.visualstudio.com/ja/vs/community から「VS Community 2017 ダウンロード」をクリックし、「vs_Community.exe」をダウンロードするVisual Studio Community 2017のインストール
「vs_Community.exe」を実行し、Visual Studio Community 2017の「インストール」をクリック
ImageMagickのインストール
ImageMagickのinclude,libを使うので、ImageMagickのダウンロードサイトからWindows用のZIP圧縮されたソース群をダウンロードし、解凍する
※ImageMagick7だとincludeのパスが違うので、ImageMagick6をソースからダウンロードし、VisualStudioを使ってコンパイルする
1. ImageMagickのダウンロードと解凍
ダウンロードファイル:ImageMagick-6.9.8-0.zip
2. configure.exeの作成
ダウンロードしたZIPを解凍すると
\ImageMagick-6.9.8-0\VisualMagick\configure\configure.sln
というソリューションがあるので、このソリューションをVisualStudioで開き、ビルドする
※このときプロジェクトの構成は何も変更しなくて良いです
\ImageMagick-6.9.8-0\VisualMagick\configure\configure.exeが作られる
3. configure.exeを実行し、VisualStudio用のソリューションを作成する
2.で作成したconfiure.exeを起動して下記のとおり実行
\ImageMagick-6.9.8-0\ImageMagick-6.9.8-0\VisualMagick\VisualDynamicMT.sln
が作成されます
4. VisualDynamicMT.slnをビルドする
VisualStudioでVisualDynamicMT.slnを開くと再ターゲットが実行されたり、必要なライブラリをインストールしろとか言われるので、言われた通りにする必要がある
なおmagick-baseconfig.hの下記をコメントにしないと、推奨されない関数群がコンパイルされないので、JMagickのコンパイル時にリンクエラーとなる
```magick-baseconfig.h
//#define MAGICKCORE_EXCLUDE_DEPRECATED ```
作成されたbinとlibをC:\ImageMagcikにコピーする
下記に作成されたbin,libをC:\Imagemagickにコピーする。
\ImageMagick-6.9.8-0\ImageMagick-6.9.8-0\VisualMagick
※かならずしもC:\直下じゃなくて良いです。ただPATHを通したりするのでわかりやすい場所が望ましい環境変数の設定
「コントロールパネル」「システム」「システムの詳細設定」「環境変数」から
システム環境変数のPATHをダブルクリックして開き、「C:\ImageMagick\bin」を追加。
JavaのJNI関係のインストール
pleiades の java には include が無いので jdkをインストールする
http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
ダウンロードした jdk-7u51-windows-x64.exe ファイルを実行する
インストールフォルダ\Java\jdk1.7.0_45\include ←ここにJNIのインクルードが入っている
JMagickの作成
1. EclipseでGitHUBからJMagick の取得
「ウィンドウ」→「パースペクティブを開く」→「その他」→「Git」
「Gitリポジトリを複製し、このビューへ追加」→「URIの複製」
<ロケーション>
URI:https://github.com/techblue/jmagick
<ブランチ選択>
6.6.9、masterを選択
<ローカル宛先>
Gitインストールフォルダ\git\jmagick
2. プロジェクトの作成
ナビゲータから「インポート」→「Git」→「Gitからプロジェクト」でJMagickプロジェクトを作成する
<Gitリポジトリーの選択>で1. で作成したリポジトリを選択
<Gitからプロジェクトをインポート>でImport using the New Project wizardを選択し、次へ
<新規プロジェクト>でJavaプロジェクトを選択し、次へ
<Javaプロジェクトの作成>でプロジェクト名にJMagickを入力
3. Makefile の編集
①\JMagickプロジェクトフォルダ\win32\Makefile.all
を
\JMagickプロジェクトフォルダ\src
にコピーし、
コピーしたMakefile.all を下記のように編集する。
``` Makefile.all
# include および 64bit Lib 指定
CPPINC=C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.10.25017\include
CPPLIB=C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.10.25017\lib\x64
# JDK ディレクトリ指定
JDKDIR=JDKインストールフォルダ\Java\jdk1.7.0_45
# ImageMagick ディレクトリ指定
MAGICKDIR=C:\ImageMagick
# コンパイラフラグ
CPP_FLAGS= \
/nologo /MT /w /EHsc /Od /Gs0 /Fo"$(INTDIR)\\" /c /favor:AMD64 \
/D "WIN64" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" \
/D "JMAGICK_EXPORTS" /D "_VISUALC_" /I "$(CPPINC)" \
/I "$(JNIINC)" /I "$(JNIINC)/win32" /I "$(MAGICKINC)" \
/I "$(GENDIR)" /I "$(SRCDIR)" /I "$(MAGICKINCDIR)"
#リンクフラグ
LINK32_FLAGS= \
"$(MAGICKLIB)" \
/nologo /dll /incremental:no /machine:x64 \
/libpath:"$(CPPLIB)" \
/out:"$(OUTDIR)\jmagick.dll" \
/implib:"$(OUTDIR)\jmagick.lib" \
/NODEFAULTLIB:msvcrt.lib \
/MANIFEST
#Java コンパイラオプション
CLASSES : $(SRCDIR)\*.java $(SRCDIR)\util\*.java "$(JDKBIN)\javac" -source 1.7 -target 1.7 -d $(CLSDIR) -classpath $(SRCDIR) -sourcepath $(SRCDIR) $(?)
```
②\ImageMagick-6.9.8-0\ImageMagick\magick
フォルダを C:\ImageMagick
にコピーする。
4. makeを実行する
コマンドプロンプトからmakeを実行し、JNIのインクルードファイル、jmagick.jar、jmagick.dllを作成する
cd "\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build"
vcvarsx86_amd64.bat
cd C:\Users\tsukamoto\git\jmagick\src
mkdir ..\classes ..\generated ..\doc ..\lib ..\
nmake -f Makefile.all
★これでJNIのinclude、jmagick.jar、jmagick.dllファイルができあがるので、
C:\ImageMagick\binにコピーする
EclipseでJMagiclkの動作確認
作成したJmagcik.jarとjmagick.dllを動作確認する
ImageMagickTest.java
package ImageMagickTest;
import magick.ColorspaceType;
import magick.ImageInfo;
import magick.MagickApiException;
import magick.MagickException;
import magick.MagickImage;
public class ImageMagickTest {
public static void main(String[] args) {
// 変換前ファイルのロード
String LoadFileName = args[0];
String SaveFile = args[1];
try{
// イメージマジックのオブジェクトを生成
ImageInfo info = new ImageInfo(LoadFileName);
MagickImage image = new MagickImage(info);
System.out.println("SizeBlob="+image.sizeBlob());
// 解像度
System.out.println("XResolution:"+ image.getXResolution());
System.out.println("YResolution:"+ image.getYResolution());
// 画像フォーマット
System.out.println("ImageFormat:"+ image.getImageFormat());
// カラー区分設定
System.out.println("Colors:"+ image.getColors());
int iColorSpace=image.getColorspace();
//System.out.println("ColorSpace:"+ iColorSpace);
switch(iColorSpace){
case ColorspaceType.RGBColorspace :
System.out.println("RGBColorspace");
break;
case ColorspaceType.CMYKColorspace:
System.out.println("CMYKColorspace");
break;
case ColorspaceType.GRAYColorspace:
System.out.println("GRAYColorspace");
break;
case ColorspaceType.sRGBColorspace:
System.out.println("sRGBColorspace");
break;
case ColorspaceType.UndefinedColorspace:
System.out.println("UndefinedColorspace");
break;
default:
System.out.println("その他");
break;
}
if(image.isGrayImage()){
System.out.println("isGraymage:True");
}else{
System.out.println("isGraymage:False");
}
// 後処理
image.destroyImages();
}catch(MagickApiException ex) {
System.out.println( "ImageJpgChg MagickApiException 例外発生");
}catch(MagickException Me){
System.out.println( "ImageJpgChg MagickException 例外発生");
}
catch(Exception e ){
System.out.println( "ImageJpgChg Exception 例外発生");
}
}
}