毎日モザイク

White Room Layout Works

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