saitoha / libsixel

A SIXEL encoder/decoder implementation derived from kmiya's sixel (https://github.com/saitoha/sixel).
MIT License
2.49k stars 83 forks source link

https://www.youtube.com/yt/img/logo_1x.png が正しく表示されない。 #31

Closed msmhrt closed 9 years ago

msmhrt commented 9 years ago

OS: Ubuntu 14.04.1 (amd64)

hotfix-issue-29 ブランチ( https://github.com/saitoha/libsixel/commit/b6748d1a49477200a7dfb93c767207d96aec53d5 ) で下記のコマンドを実行すると、

$ wget -O - "https://www.youtube.com/yt/img/logo_1x.png" | img2sixel

下記のような画像が表示されます。

output

問題視しているのは赤と黒の境界が汚い点です。

(2015-02-16 07:40 追記)画像を添付しようとして Submit してしまったので後から追加しました。

msmhrt commented 9 years ago

書き方がちょっとまずかったかもしれませんが、他のブランチでも発生していますので hotfix-issue-29 ブランチだから問題というわけではありません。

今回は -I オプション等では問題を回避できなかったのですが、確認した中では唯一、develop ブランチで -B "#000000" を指定した時だけ下記のような画像が出力されました。 output

saitoha commented 9 years ago

libpngの実装を軽く眺めた限りでは、アルファチャネルを抜く操作(png_strip_alpha)を指定することによって、

となるようです。

この場合はマスキング処理になってしまっていました。 そこで、背景色が引数で指定されず、画像のヘッダ中に背景色も無い場合は、黒を背景色としてセットすることにしました。

なお、hotfix-issue-29 はlibsixel-1.4系にマージされる予定ですが、1.4系には背景色関係の修正を入れる予定はありません。

なので、fix-issue-25からブランチを生やしてfix-issue-31を作りました。 この修正は、1.5系でリリースされると思います。

msmhrt commented 9 years ago

マスキング処理になるので色の境界が汚くなっただけなのでしょうか?

マスキング処理の詳細は分かりませんが、

黒黒黒黒赤赤赤赤

ではなく、

黒黒黒赤黒赤赤赤

になっている箇所がありましたので、何らかの要因で意図していない結果になっているのでは?と疑っています。

saitoha commented 9 years ago

気になったのでちゃんと検証してみると、以下のような感じです。 上は赤成分、下はアルファ成分(それぞれ0以外の部分を2桁の16進数で)です。

2015-02-17 13 14 53

アルファ値が1-4のピクセルが輪郭を縁取るように存在しています。 0の部分だけがマスクされているので境界がおかしいのだと思います。

msmhrt commented 9 years ago

元画像のデータがそのようになっているので、マスキング処理をした場合はあの画像にならざるを得ないということですね。

こちらの確認不足で、お手数をおかけしました。m(__)m

saitoha commented 9 years ago

1488be8 が入ったv1.5リリースされたので閉じます。