【问题标题】:Better quality PNG transparency with PHP使用 PHP 获得更高质量的 PNG 透明度
【发布时间】:2013-03-23 02:50:54
【问题描述】:

我的代码如下所示:

<?php
$imgl = "test/white.png";
$img2 = "test/1.png";

$dest = imagecreatefrompng($imgl);
$src = imagecreatefrompng($img2);
imagecolortransparent($src, imagecolorat($src, 0, 0));
imagecolortransparent($dest, imagecolorat($dest, 0, 0));

$src_x = imagesx($src);
$src_y = imagesy($src);
imagecopymerge($dest, $src, 0, 0, 0, 0, $src_x, $src_y, 100);

// Output and free from memory
header('Content-Type: image/png');
imagegif($dest);

imagedestroy($dest);
imagedestroy($src);
?>

此代码将图像合并在一起,同时保持其透明度。但是,此代码使图像的透明度质量非常低,并且边缘看起来非常粗糙。我想知道,有没有一种方法可以保持图像的透明度,但质量更好?不过,我仍然希望这个脚本完成相同的功能。

【问题讨论】:

    标签: php image merge png


    【解决方案1】:

    GIF 仅具有 1 位 Alpha 通道,这意味着它无法表示部分透明度。每个像素要么完全透明,要么完全不透明。这是您的代码的第一个潜在问题。

    另一个是imagecolortransparent() 设置单一颜色被解释为透明。这意味着只有具有完全该颜色的像素才会是透明的。如果您需要平滑过渡,您可能需要自己实现实际的每像素真彩色透明度。

    【讨论】:

      【解决方案2】:

      看起来您正在将图像输出为 GIF,而不是 PNG。试试imagepng() 而不是imagegif()

      imagepng($dest);
      

      【讨论】:

      • 嗯,我试过了,但它使图像上的所有黑色轮廓/形状也变得透明。
      猜你喜欢
      • 2010-09-23
      • 2010-10-07
      • 2013-09-20
      • 1970-01-01
      • 2010-12-29
      • 2019-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多