2012-01-31 4 views
1

をpngのトゥルーカラー対パレットを自動検出することができますどのように私は次のコードは、常にパレットの画像を生成するGDマニュアルで説明したように

$image = GD::Image->newFromPngData($mydata); 

以下は、トゥルーカラー画像を生成するが:

$image = GD::Image->newFromPngData($mydata,1); 

しかし、

「8ビットカラーマップpng」はパレットを使用しますが、「8ビット/カラーRGB png」ファイルはtruecolorを使用してください。

私はこれをデフォルトにすることを期待しましたが、そうではありません。

私はlibgdマニュアルにこれが可能であるというヒントを見つけられませんでした。おそらくpngヘッダから情報を手動で読み取ることによって、データ自体からこの情報を抽出することは可能でしょうか?ここでは、これはより明確にする

は何かを自動検出していないいくつかのコードの例です:

#!/usr/bin/perl 

use GD; 

$image = GD::Image->newFromPng($ARGV[0]); 

if ($image->isTrueColor()) { 
    print "truecolor\n"; 
} else { 
    print "indexed\n"; 
} 

答えて

2

あなたが望むもののために、ファイルのヘッダを検索することはおそらく可能ですが、結果はおそらく意志エラーが起こりやすい。

あなたのためにヘッダーを解析できるツールを使用する方がよい。 CPANの検索がうまくいくかもしれないいくつかを明らかに:

など。


しかし、GDのドキュメントから、自動検出がnewFromPngDataは引数を1つしか渡され、デフォルトであるようにそれはそう:イメージ場合はPNG画像を読み込むことによって作成された

画像はトゥルーカラーになります ファイル自体はトゥルーカラーです。イメージをパレットベースにするには、オプションの$ truecolor引数に の値を0とします。

自動検出が機能しない場合は、ソースファイルが本当に自分の考えであることを確認し、GDが間違って解釈している場合は、バグレポートを送信する必要があります。

関連する問題