【问题标题】:Creating transparent PNG images in PHP with GD leaves fuzzy edges使用 GD 在 PHP 中创建透明 PNG 图像会留下模糊边缘
【发布时间】:2018-09-29 08:54:43
【问题描述】:

我在 png 文件中有一个透明徽标。我正在尝试创建一个透明的框图像,作为徽标的背景。因此,最终图像将是程序创建的透明 png 和文件中透明徽标的合并。我使用的代码有效,但是结果显示带有模糊黑色边缘的徽标。有关如何获得更清晰图像的任何想法?

这是我的代码:

$source=imagecreatefrompng($logoFile);
imagealphablending($source, false);
imagesavealpha($source, true);   
$newImage = imagecreatetruecolor(450,280);
$black = imagecolorallocate($newImage, 0, 0, 0);
imagecolortransparent($newImage, $black);
imagecopyresampled($newImage,$source,0,0,$x,$y,450,280,$width,$height);
imagepng($newImage,$imageDirectory,0); 
imagedestroy($newImage);

已编辑 对不起,我想我应该更清楚。传入的图像文件来自文件上传表单字段。而且大部分文件都是组织标志。一些 .png 文件包含透明度 Alpha 通道(它们不是完全透明的)。我必须重新创建它的原因是因为我也在使用cropper.js,这是一个可以让您放大或裁剪正在上传的文件的工具,并且无论大小,我都需要最终文件为 450x280上传的文件是。所以在我的代码中,$x, $y, $width, $height 在用户操作原始图像后由cropper.js 发送。

正如我所说,图像处理工作正常。唯一的问题是,当我用户提交具有透明度的 png 时,徽标非常模糊,带有黑色边缘。当我在$black = imagecolorallocate($newImage, 0, 0, 0); 中将黑色更改为另一种颜色时,我失去了所有的透明度。

这是一个示例输入和输出文件。左边是原始图像,右边是输出。这个测试图像的输出并不像真实图像那么糟糕。真实图像的模糊性要大得多。

【问题讨论】:

  • 一个示例输入和输出文件可能会有用。
  • 另外,尝试imagecopy() 而不是imagecopyresampled(),因为您没有调整任何大小,因此无需重新采样,我可以看到这会导致模糊。
  • 什么是透明标志?我从未听说过透明标志。好吧,如果它是透明的,那么它在 alpha 通道中什么都不是。
  • 如果您将$black 更改为其他内容,您还会得到“模糊的黑色 边缘”吗?或者,如果你把它改成紫色,你会得到“模糊的紫色边缘”吗?
  • 仅供参考:倒数第二条评论的第一部分是您决定您的问题不会得到回答的确切时刻。

标签: php png gd alpha-transparency


【解决方案1】:

我发现了问题。首先,我尝试使用 imagecopymerge 来查看是否得到了更好的结果。我读了documentation 和罗德里戈的帖子真的很有帮助。我尝试使用他的功能,但随后整个透明度都消失了。那时我意识到我的服务器的 GD 版本正在阻止 imagecreatetruecolor 正常工作。无论我使用什么颜色,我总是以黑色结束。我更新了 GD,一切看起来都好多了。

【讨论】:

    猜你喜欢
    • 2011-03-30
    • 2011-08-31
    • 2013-03-17
    • 1970-01-01
    • 2021-03-29
    • 1970-01-01
    • 2012-03-06
    • 2012-07-22
    • 1970-01-01
    相关资源
    最近更新 更多