Wednesday, March 24, 2021

DTP操作のために、プログラム組んでたら、単位でハマった

ファブリケーションの研究しているとどうしてもフォーマット関係でハマります。

今回はDTPで扱うような、ベクター形式の画像の単位でハマりました。プログラムで印刷前提に、ベクター形式を出力しようというモチベーション自体があまりないので、情報も少なく、意図を手繰るような感じで、実験してわかったことをメモっていきます。

ここでの目標はベクター形式の画像をラスター画像と同じソフトで扱いたいというものです。

ベクター形式で画像を出力すること自体は実は簡単でした。svgというフォーマットを使えば、テキスト出力だけで、画像が出せます。文だけ読むと意味わからないのだけれど、テキストデータが、解釈されて、ベクター形式の画像として扱えるフォーマットがsvgです。ルールについては、ほかのページに任せるとして、fstreamなどのファイル出力で実現可能なのは確認済みです。ストリームで出力するとき、数値はダブルクォーテーションを入れる必要があるのですが、このとき\"として、ダブルクォーテーションを出力することだけ覚えておけばOKです。

出力された画像の長さの単位が、イラストレーターとかで開くと、ポイントという単位として扱われます。このポイントという単位は、フォントとかでしか見ないので、具体的に何ミリメートルかなんて考えることがありませんが、私はラスター画像と一緒に使いたいので、単位の換算を知る必要があります。ラスター画像の単位はmmやinchで指定はできますが、基本的には、dpiかppiを使います。dpiはdots per inch でppiはpixels per inchです。dotsはインクの粒で、pixelsは画像の粒であるピクセルです。ラスター画像では、ピクセルで色を指定するので出力を考えるとppiを単位とすることが多いです。例えば、ppiで300と指定すると、1inch=25.4mmに、300個のピクセルを並べるという、ことになります。このppiに、ベクター形式内の1という単位を無理やり合わせるにはどうしたら良いかを考えます。

ベクター形式での1という単位は、先に述べたようにポイントとなります。ポイントとインチの換算は決まっていて、1inchの中に72ポイント並べられます。1inchの換算の比率さえ合えば、単位を調整できるので、ppiのほうに無理矢理ベクター形式の1をあわせるなら、xをppiの数値とすると、72/xを係数として、ベクターの数値に掛けてやればOKとなります。具体的には、300ppiの画像に合わせるためには、ベクター形式の1を72/300かけたものでぴったり解像度が合うようになります。

具体例を挙げると、svg形式で、1ピクセル分を1×1の正方形で表現すると、300dpiの1ピクセルと合わせるには、72/300×72/300の正方形とすると、ぴったりあうということです。

終わり

Wednesday, March 17, 2021

腱鞘炎っぽい

最近、ずっとプログラムに、メールに、文書作成に、PC組み立てに、と命削って処理しているのですが、やはり何かを得るためには何かを捨てなければならないハガレンよろしくの等価交換で、今回は左手首を持ってかれたようです。

ただこの世では、交換に時間差があるようで、まだ報酬はありません。失う一方です。