2011-04-14T09:21:00+09:00 [Thu]
--> [労働]
EPS TIFFプレビュー
MacフォーマットのEPSで決め打ちしてたため、CS5対応でTIFFプレビューを使うようになってから、モザイクサイズ計算機が動かなくなってたのを直したメモ。
Macフォーマットは、プレビューを昔リソースフォークと呼んでいたところ(今なんていうか知らないw)に保存していたので、EPSファイルを読み込むと、先頭から %!PS-Adobe-3.0 EPSF-3.0 で始まっていたので、サルでも読める楽勝フォーマットですが、TIFFプレビュー形式は本体とプレビューをひと塊で記録しているのでちょっとだけ面倒でした。
EPSのTIFFプレビュー形式のファイルフォーマットは、
typedef struct EPSHeader
{
BYTE Id[4]; /* Magic Number (always C5D0D3C6h) */
DWORD PostScriptOffset; /* Offset of PostScript code */
DWORD PostScriptLength; /* Size of PostScrip code */
DWORD WMFOffset; /* Offset of WIndows Metafile */
DWORD WMFSize; /* Size of Windows Metafile */
DWORD TIFOffset; /* Offset of TIFF file */
DWORD TIFSize; /* Size of TIFF file */
DWORD CheckSum; /* Checksum of previous header fields */
} EPSHEADER;
このような形式のヘッダが付いています。
使うのは、二つ目の値(リトルエンディアン)。ここから %!PS-Adobe-3.0 EPSF-3.0 が始まります。
AppleScript単体でやると、バイト列を数字に変換するのが大変なので(っていうか、できるのか?)、perlに渡して、必要な文字列だけ拾ってくるサブルーチンを作って出来上がりました。
on getwineps(posixpath)
do shell script "perl -e '
open(HFILE,\"<@ARGV[0]\");
seek(HFILE,4,0);
read(HFILE,$toff,4);
seek(HFILE,unpack(\"V\",$toff),0);
read(HFILE,$eps,1000);
print \"$eps\";'" & " " & posixpath
end getwineps