Windows Metafile

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索
Windows Metafile
拡張子 .wmf, .emf, .wmz, .emz
開発者 マイクロソフト
種別 画像ファイルフォーマット
テンプレートを表示

Windows Metafile (WMF、ウィンドウズ メタファイル) は Microsoft Windows 上の画像ファイルフォーマットの1つであり、1990年代初期に設計された。しかし、World Wide Web の隆盛と共によく使われるようになっていった GIFJPEG に比較するとよく使われるとは言い難い。ベクトル画像フォーマットであり、ビットマップ画像を内部に含むことが可能となっている。基本的に WMF ファイルは Windows のグラフィック層である GDI が実行すべき関数呼び出しのリストであって、それによって画像が再生される。GDI 関数の中には例外処理のためにコールバック関数ポインタを引数にとるものがあるため、WMF ファイルには実行可能コードが含まれることがある。その設計手法はUNIXにおけるPostScriptに似ている。

Windows 3.0 で最初に導入された WMF は16ビット形式であった。後に追加された 32ビット版ではコマンドが追加されており、Enhanced MetafileEMF)と呼ばれる。EMF はプリンタドライバのグラフィックス言語としても使われている。

Windows Metafile の圧縮版として Compressed Windows Metafile (WMZ)Compressed Windows Enhanced Metafile (EMZ) もある[1]

仕様と特許[編集]

オリジナルの16bit WMFファイル形式は1992年のWindows 3.1 SDKの[1]4巻に定義された。しかし仕様の一部は詳細があいまいな部分があった。これらのマニュアルは書籍として買い求めることができる。 時が経つにつれてこの歴史的な仕様の存在は忘れられ、WMFファイルに対するリバースエンジニアリングが行われるようになったが、これには困難が伴い、正確さも欠いていた。 2006年9月にMicrosoftは再度WMFファイル形式の仕様をMicrosoft Open Specification Promiseの一環として公開[2]し、これを実装する者に対して特許権を行使しないことを約束した。

派生物[編集]

1993年に32bit版のWin32/GDIによるEnhanced Metafile(EMF)が登場し、これには数点のコマンドの拡張が含まれた。EMFはプリンタドライバーとやりとりするグラフィック言語としても利用された。MicrosoftはWMFはほぼ使用されず、拡張フォーマット(EMF)がこれに代わると述べた。 Windows XPの公開とともに、EMF+フォーマットが登場した。これにはGDI+ APIに対するコールのシリアライズ機能が追加されている。 他に圧縮された形式のCompressed Windows Metafile(WMZ)とCompressed Enhanced Windows Metafile(EMZ)も存在する。EMZはEMFファイル形式をgzip圧縮したもの[要出典]である。

SetAbortProc の脆弱性問題[編集]

2005年11月、"SetAbortProc" GDI 関数に脆弱性が発見された。この関数は印刷のスプーリングをキャンセルしたときのエラー処理ハンドラを登録するもので、ユーザーの許可なしで実行できる任意のコードを WMF ファイルに追加可能にしている。Steve Gibson は、この脆弱性がマイクロソフトが故意に WMF に仕込んだバックドアが原因であると主張した。しかし、他のセキュリティ専門家はこれに異を唱えており、バックドアと呼ぶにはマイクロソフトが実際にこの脆弱性を利用して秘密裏にコンピュータにアクセスしたことを実証しなければならないとしている[2]

マイクロソフトは公式のパッチを2006年1月5日にリリースしたが、古いバージョンの Windows についてはパッチを提供していない。

代替実装[編集]

WMF フォーマットは Windows の GDI で実行されることで画像を再生する。しかし、WMF 形式のファイルにはその画像で使われている GDI のグラフィックプリミティブの定義も含まれているので、他のライブラリを使って描画させたり、他の画像フォーマットに変換できる。

例えば、Batikライブラリは WMF ファイルを描画したり、SVG に変換したりできる。FreeHEP Java ライブラリの Vector Graphics パッケージでは、Java 2D で描画されたものを EMF ファイルとして保存できる。

脚注[編集]

[ヘルプ]
  1. ^ Microsoft Windows 3.1 Programmers Reference, Volume 4 Resources, Microsoft Press 1992, ISBN 1-55615-494-1, chapter 3 pp. 21-45
  2. ^ MS-WMF: Windows Metafile Format Specification”. 2008年6月1日閲覧。

関連項目[編集]

外部リンク[編集]

チュートリアルなど[編集]

ライブラリ[編集]

  • Batik Java library : WMF to SVG transcoder package WMF メタファイルから SVG への変換が可能
  • FreeHEP Java library : Vector graphics package EMF メタファイルから SVG への変換および Java2D から EMF への変換をサポート
  • libWMF, WMF メタファイルを読み込むライブラリ。表示や SVG への変換が可能
  • libEMF, POSIXシステム上でのベクター画像ファイルを生成するための描画ツールキットを提供する C/C++ ライブラリ
  • wmf2svg, WMF メタファイルから SVG への変換を実装した Java 用クラス