JavaでEMF/WMFを読み込み・変換する開発ツールJDeli
JavaでEMFやWMFフォーマットの画像を読み込み、SVGやJPG/PNGに変換するなら開発ツールJDeliが便利です。ImageIO互換のAPIで、14種類以上の画像フォーマットに対応しています。

JavaでEMF(Enhanced Metafile)やWMF(Windows Metafile)フォーマットの画像を扱う必要が出てきたとき、標準ライブラリのImageIOでは対応していないため困ってしまうことがあります。そんなときに頼りになるのが、Java用の画像処理ライブラリ JDeli(ジェイデリ) です。JDeliはEMF/WMFの読み込みに対応しているだけでなく、SVG、WebP、HEICなど14種類以上の画像フォーマットの読み込み・変換をサポートしています。
Windowsのベクター画像規格WMFと拡張版EMF
WMF(Windows Metafile)は、1990年にマイクロソフト社がWindowsのベクター画像規格として公開したフォーマットです。WMFファイルには、直線や曲線、テキスト、色の塗りつぶしなどの描画命令が記録されており、解像度に依存しない図形の表現が可能です。
その後、1993年にはWMFの拡張規格としてEMF(Enhanced Metafile)が公開されました。EMFはWMFの制約を改善し、より高度なグラフィック操作(GDI+の描画命令、座標変換、クリッピングなど)をサポートしています。
こうした経緯から、現在でもWindows環境のベクター画像としてEMF/WMFは広く使われています。特にMicrosoft OfficeのWord、Excel、PowerPointに埋め込まれたクリップアートや図形、また企業のレガシーシステムで生成されるレポートの図表などで目にすることが多いフォーマットです。
しかし、EMF/WMFはWindows固有の規格であるため、Java開発環境やLinux、macOSといったクロスプラットフォーム環境からは扱いにくいのが実情です。Javaの標準画像処理API(ImageIO)はEMF/WMFに対応していないため、標準の方法ではこれらのファイルを読み込むことができません。
JDeliならJavaでEMF/WMFを簡単に扱える
JDeliは、このようなクロスプラットフォームでの画像処理課題を解決するために開発されたJavaライブラリです。EMFとWMFの読み込みに対応しており、これらのファイルをBufferedImageとして取得したり、他の画像フォーマットに変換したりできます。
JDeliの主な特長は以下のとおりです。
- 14種類以上の画像フォーマットに対応 - JPG、PNG、TIFF、BMP、GIF、WebP、HEIC、SVG、EMF、WMFなど、幅広いフォーマットの読み書きに対応しています
- ImageIO互換のAPI設計 - ImageIOとほぼ互換性のあるコード記述が可能です。既存のImageIOベースのコードからの移行が容易です
- 高性能・省メモリ - ImageIOより高速に動作し、メモリ使用量も最適化されています。大量の画像を処理するサーバーサイドのアプリケーションに特に適しています
- 純粋なJava実装 - ネイティブライブラリに依存しないため、Javaが動作するすべてのプラットフォームで同一の動作を保証します
JDeli で EMF を読み込むサンプルコード
EMFファイルの読み込みは、わずか1行のコードで実現できます。
// ファイルから直接読み込む方法
BufferedImage image = JDeli.read(emfImageFile);より細かい制御が必要な場合は、EmfDecoderを直接使用することもできます。
// デコーダーを使用する方法
EmfDecoder decoder = new EmfDecoder();
BufferedImage image = decoder.read(emfData);どちらの方法でも、EMFファイルの描画内容がJavaのBufferedImageオブジェクトとして取得されます。取得後は、Java標準の画像処理と同様に加工や表示が可能です。
JDeli で WMF を読み込むサンプルコード
WMFファイルの読み込みも、EMFと同じ統一されたAPIで行えます。
// ファイルから直接読み込む方法
BufferedImage image = JDeli.read(wmfImageFile);デコーダーを使用する場合は以下のとおりです。
// デコーダーを使用する方法
WmfDecoder decoder = new WmfDecoder();
BufferedImage image = decoder.read(wmfData);このように、フォーマットが異なっても同じパターンのコードで読み込みが行えるのがJDeliのAPI設計の優れた点です。
EMF/WMF から SVG へ、ベクター規格のまま変換
JDeliの大きな特長の1つが、EMF/WMFファイルをJPGやPNGといったラスター画像(ビットマップ画像)に変換するだけでなく、SVG(Scalable Vector Graphics)にベクター画像のまま変換できることです。
ラスター画像に変換すると、解像度が固定されるため拡大時にぼやけるという制約があります。しかしSVGに変換すれば、ベクター画像のメリット――どれだけ拡大してもシャープなまま――を維持できます。特にウェブアプリケーションやレスポンシブデザインで使用する場合、SVGは最適なフォーマットです。
JDeli で EMF を SVG に変換するサンプルコード
File emfFile = new File("/path/to/emfFile.emf");
File svgFile = new File("/path/to/svgFile.svg");
EmfDecoder.toSVG(emfFile, svgFile);JDeli で WMF を SVG に変換するサンプルコード
File wmfFile = new File("/path/to/wmfFile.wmf");
File svgFile = new File("/path/to/svgFile.svg");
WmfDecoder.toSVG(wmfFile, svgFile);わずか3行のコードで、Windows固有のベクター画像を国際標準のSVGに変換できます。変換後のSVGファイルは、ブラウザでの表示はもちろん、他のデザインツールやドキュメント生成ツールへの組み込みにもそのまま使用できます。
日常のJava画像処理にもJDeliが役立つ
EMF/WMFを扱うJava開発の機会は頻繁ではないかもしれません。しかし、JDeliの価値はEMF/WMFサポートだけにとどまりません。
JPG/PNGといった定番のフォーマットはもちろん、ウェブの次世代フォーマットとして普及が進むWebPや、iPhone/iPadで標準的に使われるHEICなど、モダンな画像フォーマットにも対応しています。さらに、ImageIOより高速な処理性能と省メモリな動作を実現しているため、画像処理が多いアプリケーションのパフォーマンス改善にも直結します。
つまり、日常的に使うJava画像ライブラリとしてのコストパフォーマンスの良さがJDeliにはあります。EMF/WMF対応が必要になったときだけでなく、あらゆるJava画像処理のベースライブラリとして活用できるのです。
Javaで画像を扱う開発には、多機能・高性能な開発ライブラリ JDeli がきっとお役に立つことと思います。JDeliは無料で試用していただけます。画像フォーマット変換の機能や動作速度などを、まずはご自身の環境でご確認のうえ、ぜひ導入をご検討ください。

開発者向けPDF入門ガイド
PDFの仕様や活用方法など、開発者に必要な情報をコンパクトにまとめました。初めてPDFを扱う開発者にも分かりやすく、基礎から応用までカバーしているため、PDFのポテンシャルを最大限に引き出し、アプリケーション開発やドキュメント管理の効率化を図るための手引きとなるでしょう。