【问题标题】:Bad quality of GIF image in PHP GDPHP GD 中 GIF 图像质量不佳
【发布时间】:2009-08-16 06:02:38
【问题描述】:

我正在处理一个水印脚本,结果在 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

【问题讨论】:

    标签: php gd


    【解决方案1】:

    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()

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-11-06
          • 1970-01-01
          • 2014-11-10
          • 2011-03-06
          • 1970-01-01
          • 2011-04-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多