0

我有一个我正在处理的水印脚本,结果在 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 图像 http://img2.pict.com/fd/46/00/1471179/0/gif.gif

jpg 图像 = 好 jpg 图像 http://img2.pict.com/82/a1/5a/1471181/0/jpg.jpg

4

3 回答 3

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. 图像颜色匹配()
  2. 图像真彩色托板()
  3. 图像调色板复制()

我不确定您将如何应用它们,但我猜您可以做一些事情来改善结果。

于 2009-08-15T21:51:21.027 回答
2

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

于 2009-08-15T21:49:58.767 回答
0

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

于 2009-08-15T21:52:56.267 回答