GitHub - schriftgestalt/GlyphsTracePlugin が手元の環境 (Big Sur + Glyphs 2.6.6 (1352)) でうまく動作しない。Trace Image Filter Does not work - Scripting - Glyphs Forum の現象の 1 つなのかもしれない。ので調べた。
https://github.com/schriftgestalt/GlyphsTracePlugin/blob/a2bfd1a579916d6ed5b74315aecb0259a6cdd875/TraceImage/TraceImage.m#L123 の箇所の Result
が "(\n)\n"
になっているのが原因だったんだけど、何が起こっているのか追跡するために、potrace
のプロセスに Xcode でアタッチすることにした。Plugin を Debug ビルドしておいて、見たい箇所にブレークポイントを置いて、
のように、[Debug] -> [Attach to Process by PID or Name...] で potrace
を指定して待機しておくと、Plugin が potrace
を起動したタイミングで Xcode がアタッチしてくれる。https://github.com/schriftgestalt/GlyphsTracePlugin/blob/a2bfd1a579916d6ed5b74315aecb0259a6cdd875/potrace-1.13/src/backend_Glyphs.c#L195 で write_paths
が何も書き出してくれないのでダメだということが分かった。これは第 2 引数の plist
が NULL
であることで起こっていた。
もっと追いかけると、https://github.com/schriftgestalt/GlyphsTracePlugin/blob/a2bfd1a579916d6ed5b74315aecb0259a6cdd875/potrace-1.13/src/decompose.c#L436 でずっと NULL
が返っていそうで、found
に至っていないようだった。find the next set pixel in a row <= y ができなかったということになる。Xcode 上では画像の幅と高さとして正しいものが見えていたのだが、potrace
用に内部で画像フォーマットを変換?した際に真っ白な画像にでもなっているのだろうか・・・。
ポインタの先からどういう画像か割り出すのが大変すぎるし、その画像?みたいなのは多分 Plugin の本体側でよろしくやっているものであろうが、そこは Xcode で踏み込めないので一旦断念・・・。Xcode の力強さは凄いけど、Plugin のデバッグはつらすぎた・・・。
ここまでのまとめ
write_paths
が何も書き出してくれない。
もうちょっと頑張ってみる。https://github.com/schriftgestalt/GlyphsTracePlugin/blob/a2bfd1a579916d6ed5b74315aecb0259a6cdd875/TraceImage/TraceImage.m#L110 で potrace
用の .bmp を作成しているので、TempSaveString
の内容を確認して毎回その辺に .bmp が作成されるはずという当たりをつける。で、見てみたのだけど、やはり真っ白な画像になっていた。https://github.com/schriftgestalt/GlyphsTracePlugin/blob/a2bfd1a579916d6ed5b74315aecb0259a6cdd875/TraceImage/TraceImage.m#L105-L114 辺りの処理?何で?
ここまでのまとめ
なお、Glyphs を cutting edge version の Version 2.6.7 (1357) にしてみても特に変化はなさそうだった。
Objective-C の binding を使って Python でマクロパネルから実行してみる。
layer = Glyphs.font.selectedLayers[0] image = layer.backgroundImage bitmap = image.image.flatImageRep() bmp_data = bitmap.representationUsingType_properties_(1, None) bmp_data.writeToFile_atomically_('/Users/xxx/yyy/test.bmp', False)
あれ?見事に白いぞ・・・。なんてこった・・・。
jpg_data = bitmap.representationUsingType_properties_(3, None) jpg_data.writeToFile_atomically_('/Users/xxx/yyy/test.jpg', False)