PHP GD中GIF图像的质量差

时间:2009-08-15 21:43:34

标签: php gd

我有一个我正在处理的水印脚本,结果在PNG和JPG图像上很好但是gif图像,不太好。我正在使用PHP和GD

下面你可以看到水印质量的差异。

任何人都知道如何改进这个?

对于我使用的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

3 个答案:

答案 0 :(得分: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()
  4. 我不确定你会如何应用它们,但我猜你可以采取一些措施来改善结果。

答案 1 :(得分:2)

GIF仅支持256色的调色板。因此,水印图像的颜色必须映射到此调色板。这导致它们以不同于以前的颜色进行渲染和保存。由于这种小调色板,一般情况下不建议将GIF用于照片。

答案 2 :(得分:0)

GIF图像永远不会很好看,因为调色板是256色。正如MrMage所说,颜色映射会严重逼近图像的真实颜色。你最好使用PNG,它们确实支持透明度。