Closed msmhrt closed 9 years ago
掲題の通りですが、もし何らかの方法で透過色の背景色を指定できるようでしたらその方法を教えていただけないでしょうか?
現状は不可能です。 libsixel側で背景色とブレンディングしてやる必要がありますね。
あ、ちょっと誤認していたけど、今はlibsixel側ではなくimg2sixelの中でalpha成分を抜いてたんですね。 libpngの機能で背景色を設定するような方向で検討してみます。
お、期待してます。
上記の画像はとりあえず「コマンド一発で透過 png を綺麗に非透過 png にする」の「綺麗な方法」を参考にして、
$ wget -O - "http://www.fileformat.info/info/unicode/char/01dd/latin_small_letter_tu
rned_e.png" | convert - \( +clone -alpha opaque -fill white -colorize 100% \) +swap -geometry +0+0 -compose Over -composite -alpha off - | img2sixel
で表示できました。 (どうやら半透明だったらしく、同ページの「スタンダードな方法」ではダメでした。)
fix-issue-25ブランチに-B/--bgcolorオプションを追加してXParseColor形式の一部
を背景色指定として受け付けるようにしました。(したつもり。まだほぼテストしていません。) 今はまだ、libpngのRGBAフォーマットを読んできた時だけしか有効になりません。
fix-issue-25
でビルドして、
$ wget -O - "http://www.fileformat.info/info/unicode/char/01dd/latin_small_letter_turned_e.png" | img2sixel --bgcolor "#FFFFFF"
を試してみましたが、 という結果になりました。
前述した convert
コマンドを使った方法だと、
のように表示されます。
ああ、Debianの1.2.50-2+b2でそれが再現しました。 どうやらまたlibpngバージョン問題っぽいです。
e3feddd で直したと思っています。 あとはアルファ付きグレイスケールとかパレット指定時の単色キーカラー透過への対応も必要だと思っています。
https://github.com/saitoha/libsixel/commit/e3feddd50e80ccf62efa870fa1e705ac9c5e3204 でビルドして前述した再現手順で問題なきことを確認しました。
他の様々なケースについては気長にお待ちしたいと思います。
8bppパレットの透過PNGに対応(libpng使用時のみ)。
$ convert -background none -fill #f00 -pointsize 100 label:test png:- | img2sixel -B#fabcd0
4bppとかの透過色付きPNGのテスト用画像はいったいどうしたら作れるのかという問題が出てきていて、 どっかのOSSプロダクトとかで色んなパターンのテスト用画像溜め込んでいるところがあったら知りたいです。
http://www.schaik.com/pngsuite/ PngSuite はいかがでしょうか。
すみません。念のために確認させていただきたいのですが、
libsixel
では透過GIFの透明色は透明にならない。という理解であってますでしょうか?
手元の環境では https://ssl.gstatic.com/ui/v1/icons/mail/images/star_on_sm_2.gif 等で確認して透明色が透明にならなかったのですが、こちらの環境で発生する問題で本来は透明になるはずだったりするとマズいなと思ったので確認させていただきました。
@hajimehoshi ありがとうございます!これは知りませんでした。 Transparencyのテストに4bpp(16色)のパレットはなかったようですが、ほかのケースをテストするのにかなりl有用だと思います。
@msmhrt
Sixel の仕様は単色カラーキー透過をサポートしているが、現時点の libsixel では透過GIFの透明色は透明にならない。 という理解であってますでしょうか?
はい。合っています。 libsixelの内部では単色カラーキーのインデックス番号を保持していますが、まだそれにアクセスするAPIを公開していません。 例外として、-eオプションでモノクロ出力を指定した時に、背景色を透過色にしています。 (当時はその方がサイズが小さくなる、という理由でそうしました。)
@saitoha さん
了解です。ホッとしました。
@msmhrt これもちょっと前に要望あって調べた時にちょっと挫折していて、たしかフレームごとにインデックスカラー透過色持てる仕様だったように記憶しています。なのでフレーム読み出しのコールバック化が先かなと思っています。
@saitoha さん
あー、なるほど。これも複数フレームが絡んだ制限だったんですね。
コールバック化が困難で、1フレームかどうかの検出も難しいようでしたら、--static
オプションを指定した時だけでも透過色がサポートされれば結構嬉しいかもしれません。
@msmhrt はい。対応の順序を検討してみたのですが、 まずはこのIssueの主題である、背景色を指定した時のアルファブレンディング対応が優先だと思います。 その後に単色カラーキー透過ができる以下のケースを分けて
上記の順番(対応が楽そうな順)で透過SIXEL出力対応を入れようと思います。 (Issueとしては分けた方が望ましいかも)
@saitoha さん
(Issueとしては分けた方が望ましいかも)
この Issue は元々、FireFormat.Info の画像を正常に表示して欲しいという理由から立てられた物で、その要望については既に fix-issue-25
ブランチで実現されています。
ですので fix-issue-25
ブランチが master
ブランチにマージされれば、本 Issue は close されるべきだろうと思っています。
問題は、マージされて close される前に同ブランチで何らかの問題、例えば単色透過で透過色と非常によく似た色が透過色と誤判定される等の問題が万が一見つかった場合だと思いますが、Issue を分けた方が望ましいということであれば、それに従いたいと思います。
このIssueは-B
オプションで解決可能な問題に限定して考えます。
Issue #29 で判明した横幅が8の倍数ではない1bpp PNGが正しく読めない問題は、こちらでの対応が原因です。
-B
オプション入ったので閉じます。
掲題の通りですが、もし何らかの方法で透過色の背景色を指定できるようでしたらその方法を教えていただけないでしょうか?
ちなみに、実際に困ったシチュエーションは http://www.fileformat.info/info/unicode/char/01dd/index.htm の http://www.fileformat.info/info/unicode/char/01dd/latin_small_letter_turned_e.png を
w3m
で表示しようとした時です。