-
を渡す。
ただ、対話的にテストランしてるときにshowpageで困る。
-dTTYPAUSE
を指定すればよいのだが、最近のGhostscriptのSAFERモードでは--permit-file-read=/dev/tty
が必要なことがある。
-o - -q
。
-q
を忘れるとゴミ(起動時のメッセージ)もImageMagickに流れてしまい、ImageMagickに「こんな画像知らん」と怒られる。
実は毎回悩む。
どうしても取れないゴミメッセージは
-sstdout="%stderr"
を使う。
Postscript中の標準出力が環境側の標準エラー出力に出力される。
-o
で指定したファイル名は
/OutputFile
に反映され、こちらは
-sstdout
の影響を受けない。
もうひとつ、PostScriptソース中に
showpage
を入れておかないとだめかもしれない。
-dTextAlphaBits=n
・
-dGraphicsAlphaBits=n
で指定できるが、あまり性能がよくない。
-r360
のように大き目の解像度を指定して、ImageMagickで縮小したほうが結果がよい。
Details of Ghostscript Output Devices / PNG file format
に書いてあるのだがよく忘れる。
-sDEVICE=png16
が16色、
-sDEVICE=png256
が256色、
-sDEVICE=png16m
が24bppカラー。
24bppカラーなのに16mなのですごく覚えづらい(ので忘れる)。
-o output-%03d.png
のようにするとshowpageごとに番号をインクリメントしながら画像ファイルを作ってくれる。
WindowsのDOS窓の場合、
%
がメタキャラクタなので気をつける。
単なる連番ではない場合や、番号が1から始まらない場合は、スクリプトの中からファイル名を指定できる。
デバイス辞書の
OutputFile
を再設定すればよい。
<< /OutputFile (page1000.png) >> setpagedevice
セーフモードになっていると変更できないらしいので、きちんと動かないときは
-dNOSAFER
を付けてみる。
ものすごい苦手。
本来は
pdfmark
オペレータで半透明にすることが可能で、
pdfmark
自体はしおりとかの生成に使えるのだが、GSは半透明関連の指定をバッサリ無視する。
その代わり、
.setblendmode
・
.setopacityalpha
・
.setshapealpha
というのが使える。
gs9.53からこのふたつのオペレータはDeprecatedになりました。
gs9.53からは
.setstrokeconstantalpha
・
.setfillconstantalpha
などのオペレータを使います。
Ghostscript and the PostScript Language
/
Transparency
を参照。
また、
ALLOWPSTRANSPARENCY
を
true
に設定しておかないと半透明関連のオペレータは使用できずエラーになります。
つまり、コマンドラインで
-dALLOWPSTRANSPARENCY
のように指定して使います。
ALLOWPSTRANSPARENCY
を
true
にしておけば
.setopacityalpha
などの古いオペレータも使えますが、-q
を指定していても標準出力に警告が出ます。
標準出力にPNGやPDFを出力してパイプでつないで処理してる場合や、CGIのレスポンスにそのまま使っている場合、ゴミが入って出力が壊れます。
コマンドラインで
-sstdout="%stderr"
としてメッセージが標準エラー出力に出るようにするか、新しいオペレータに書き換える必要があります(結構迷惑)。
(24 Jan 2021)
グラフィックステートの一種なので gsave の影響を受ける。 とりあえず、
/Normal .setblendmode 0.5 dup .setstrokeconstantalpha .setfillconstantalphaとすれば、そのあとに書いた画像は半透明になる。
ただし、XやPNG出力ドライバは対応していなくて、
-sDEVICE=pdfwrite
でPDFにする必要がある。
ps2pdf
では反映されない不思議。
しかも面白いことに、PDFで反映されていれば、
gs -sDEVICE=png16m -o test.png test.pdf
とすると、半透明のPNGができる。
だから、
gs -sDEVICE=pdfwrite input.ps -q -o - | gs -sDEVICE=png16m -o output.png -と、パイプでつないで2回GSを使えば半透明のPNGができる。 へんなの。
一応
revision
オペレータでGhostscriptのバージョンを得ることができるが、Ghostscript 9.26は
926
を、Ghostscript 9.53.3は
9533
を返してきた(エーっ?)。
.setopacityalpha
を使うべきか
.setstrokeconstantalpha
を使うべきか判断するようなときは
revision
を使うのではなく、素直にオペレータがあるかどうかで判断した方がいいようだ。
/.setstrokeconstantalpha where { pop /.setopacityalpha { dup .setstrokeconstantalpha .setfillconstantalpha } bind def } if
Copyright (C) 2019-2021 akamoz.jp
$Id: gs-tips.htm,v 1.7 2021/01/24 09:51:49 you Exp $