2009-08-15 15 views
0

私は作業中の透かしスクリプトを持っていますが、結果はPNGとJPG画像では良いですが、GIF画像ではあまり良くありません。私はPHPとGDを使用していますPHP GDのGIF画像の品質が悪い

以下は、透かしの質の違いを見ることができます。

これを改善する方法を知っている人はいますか? GIFバージョンについては

私が使用しています

$image = imagecreatefromgif($source_file); 
imagecopymerge($image, $watermark, $x, $y, 0, 0, $water_width, $water_height, 65); 
imagegif($image, $source_file); 

GIF画像=悪い品質 gif image http://img2.pict.com/fd/46/00/1471179/0/gif.gif

のjpg画像=良い jpg image http://img2.pict.com/82/a1/5a/1471181/0/jpg.jpg

答えて

5

GIFイメージには、最大256色を含む固定パレットがあります。ここでの問題は、挿入するイメージがターゲットイメージで利用できない色を使用している可能性があります。

私はこれを試したことはありませんが、ショットに値するかもしれません。最初にgif画像を真のカラー画像に変換してから、透かしを入れてからgifに変換してみてください。

$image = imagecreatefromgif($source_file); 
// create a true color image of the same size 
$image2 = imagecreatetruecolor(imagesx($image), imagesy($image)); 
// copy the original gif image on to the true color image 
imagecopy($image2, $image, 0, 0, 0, 0, imagesx($image), imagesy($image)); 
// copy the watermark onto the new true color image 
imagecopymerge($image2, $watermark, $x, $y, 0, 0, $water_width, $water_height, 65); 
// write the new image to disk 
imagegif($image2, $source_file); 

それが違うかどうか試してみてください。

あり役立つかもしれない可能なパレット操作関数のカップルもあります:私はあなたがそれらを適用するかどうかはわかりません

  1. imagecolormatch()
  2. imagetruecolortopalette()
  3. imagepalettecopy()

が、結果を改善するためにできることがいくつかあると思います。

+0

+1、私の答えよりはるかに包括的です。 – MrMage

2

GIFは256色のカラーパレットをサポートしています。したがって、透かし画像の色をこのパレットにマップする必要があります。これにより、以前とは異なる色でレンダリングされ、保存されました。この小さなパレットのおかげで、GIFは一般的な写真にはお勧めできません。

0

カラーパレットは256色であるため、GIF画像は大きく見えることはありません。 MrMage氏の言うとおり、カラーマッピングは画像の真の色を厳密に近似します。あなたはPNGでより良い、彼らは透明性をサポートしています。

関連する問題