Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP GD调整透明图像大小,提供黑色边框_Php_Gd_Image Resizing - Fatal编程技术网

PHP GD调整透明图像大小,提供黑色边框

PHP GD调整透明图像大小,提供黑色边框,php,gd,image-resizing,Php,Gd,Image Resizing,我正试图用GD缩小PHP中的一些透明图像,每当我这样做时,就会在其周围添加一个奇怪的黑色边框 之前 之后 代码 <?php $image = imagecreatefromstring(file_get_contents('logo.png')); $width = imagesx($image); $height = imagesy($image); $newWidth = $width - 1; $newHeight = $height -

我正试图用GD缩小PHP中的一些透明图像,每当我这样做时,就会在其周围添加一个奇怪的黑色边框

之前

之后

代码

<?php
    $image = imagecreatefromstring(file_get_contents('logo.png'));
    $width = imagesx($image);
    $height = imagesy($image);

    $newWidth = $width - 1;
    $newHeight = $height - 1;
    $output = imagecreatetruecolor($newWidth, $newHeight);
    imagecolortransparent($output, imagecolorallocatealpha($output, 0, 0, 0, 127));
    imagealphablending($output, false);
    imagesavealpha($output, true);
    imagecopyresampled($output, $image, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);

    header('Content-Type: image/png');
    imagepng($output);
?>

如果我将新维度的代码更改为与旧维度相同(删除
-1
),则不会出现黑色边框。因此,调整大小是导致问题的原因

有人知道什么地方出了问题吗


编辑:我刚刚意识到这只会发生在你身上,而不会发生在你身上。但是,
imagecopyresampled
提供了更好的视觉效果,如果可能的话,我希望它能正常工作。

我认为这里的问题是你的源图像

您拥有的不是带有alpha通道的真彩色PNG,而是带有透明颜色的索引彩色PNG。如果在Photoshop中打开图像,这一点很明显:

此图像已经使用抗锯齿功能创建(此处显示白色边框的黄色文本),但当您重新调整其大小时,亚像素计算可能会超出其边框一点


我怀疑如果您修复图像,使其具有alpha通道的完全RGB,您就不会有这个问题。

看起来抗锯齿使用黑色作为无光颜色。@Brad确实如此。然而,文档页面上说,默认情况下,抗锯齿是关闭的,并且它只随捆绑版本的GD一起提供,我没有使用它。可能是其他函数引起的,但据我所知,我没有看到任何其他参数……我只是意识到它只发生在,而不是。但是,
imagecopyresampled
提供了更好的视觉效果,如果可能的话,我想让它工作。@Xeon06如果你找到了它的解决方案,请也告诉我。谢谢你的回答。你可能知道有什么方法可以让它以编程方式工作,或者它是可撤销的吗?最好的办法是获得一个好的源映像。这在Photoshop中很容易修复。给我发电子邮件brad@musatcha.com,我将向您发送更新的文件。非常感谢您的帮助。问题是,这是由我们的客户在web界面上完成的。我想他们只好将就了。再次感谢。@Xeon06,也许您只能接受真彩色图像?或者,也许有一种方法可以在调整大小之前将此图像转换为完整的RGB非索引图像?这就是我想知道的,是否有一种方法可以事先将其转换。