2011-02-15 13 views
6

MVC3/WebMatrixリリースのWebImageを使用してください。代わりに使用する透明性のストリッピングと黒と画像でなぜWebImage.ResizeはPNG透過性を除去するのですか

return new WebImage(path) 
     .Resize(120, 265) 
     .GetBytes("Png"); 

結果: - か - それに対して、次のコードを実行enter image description here

Sample Image:ファイルパスから、次の画像の読み込み:

Blacked out transparency

同じでRotateRight()、ロタで発生teLeft()とFlipHorizantal()しかし、私は.Resize()メソッドを呼び出していない場合:

return new WebImage(path) 
     .GetBytes("Png"); 

画像が問題なく返されます。

+0

のウェブ画像部分とは何ですか? – Craigt

+0

System.Web.WebImageは、MVC3やWebMatrixの一部として出荷されています。 –

+1

実際の画像へのリンクを投稿できますか? SOが使用している画像サービスは残念なことに物事を再圧縮するので、あなたの特定の画像に特別なものがあれば見ることはできません。 –

答えて

2

画像は8ビット(インデックスカラー)ですか? 8ビットイメージのサイズを変更すると、結果がより滑らかに見えるように、インデックス付きカラーからRGBに変換されることがよくあります。カラーテーブルを変更せずに画像のサイズを変更することはめったにうまくいきません。

イメージがすでにRGB(24ビット以上)である場合、もう少し複雑です。イメージのエッジ、「透明」と「非透明」の境界で、リサイザは何を行う必要がありますか?多くのサイズ変更アルゴリズムでは、境界線で「2色の平均化」と似た処理を行いますが、イメージをよりスムーズに見せるために、透明度の概念はありません。

したがって、PNGの機能を完全に実装するのではなく、「おそらくバグだ」と簡単に答えています。

解決策は存在しないかもしれませんが、私は試してみた:8ビットカラーで

  1. 滞在それがオプションである場合、または32ビットに事前に変換します。
  2. 透明色の色またはカラーインデックスを取得します。サイズ変更後、その値を強制的に透明にします。前述の「スムージング」のために、透明と非透明の間のエッジはその色ではなく、おそらく黒と実際に必要な色のブレンドのように見えます。
  3. 他に何もない場合は、より詳細な制御を可能にする外部ライブラリを使用する必要があります。
+0

私はWPF/System.Windows.Imaging.Mediaで実行可能であることを知っていますので、今回は大きな銃に戻す必要があります。 –

0

GetBytes()の代わりにWrite()メソッドを使用しようとしましたか?

+0

'Write()'は残念ながらシーンの下で 'GetBytes()'を呼び出します。 –

関連する問題