使用GD2将png转换为jpg..透明度问题

发布于 2024-10-22 02:48:56 字数 1191 浏览 0 评论 0原文

我有一个带有白色背景和一些透明度的 image.png 。

我尝试将图像转换为 jpg:

$data = file_get_contents('image.png');
$resource = imagecreatefromstring($data);
imagejpeg($resource); //> I TRIED WITH QUALITY = 100 TOO

问题是 png 获得透明度,而 jpg 获得相当大的黑色区域。这是 jpg 的样子:

http://img861.imageshack.us/img861/20/ context.jpg

有办法解决这个问题吗?

Edit1:

按照Abiusx的建议,我也尝试了这个:

$data = file_get_contents('image.png');
$resource = imagecreatefromstring($data);
imagealphablending($data, false);
imagesavealpha($data, true);
imagejpeg($resource);

但结果是一样的。请注意源 .png 图像为:


(来源:tipradar.com

感谢帕特里克评论:这里的技巧:GD!将 png 图像转换为 jpeg 并使 alpha 默认为白色而不是黑色

I have an image.png with white background and some trasparceny over it.

I tried this to convert the image into jpg:

$data = file_get_contents('image.png');
$resource = imagecreatefromstring($data);
imagejpeg($resource); //> I TRIED WITH QUALITY = 100 TOO

Problem is where the png got the trasparency now the jpg got a pretty huge black zone. This is how jpg looks:

http://img861.imageshack.us/img861/20/context.jpg

Any way to solve the problem?

Edit1:

As suggested by Abiusx I tried this too:

$data = file_get_contents('image.png');
$resource = imagecreatefromstring($data);
imagealphablending($data, false);
imagesavealpha($data, true);
imagejpeg($resource);

But the result was the same. Please note The source .png image is:


(source: tipradar.com)

Thanks to Patrick comment: here the trick: GD! Converting a png image to jpeg and making the alpha by default white and not black

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

趴在窗边数星星i 2024-10-29 02:48:56

这是我用来调整 PNG 大小但保留透明度的函数,如果没有帮助,请告诉我提取您所需的部分:

function Resize($ImageFile,$OriginalFile)
{
    $ext=basename($OriginalFile);
    $ext=explode(".",$ext);
    $ext=array_pop($ext);
    $ext=strtolower($ext);
    if ($ext=="jpg" or $ext=="jpeg" or $ext=="jpe")
        $img=imagecreatefromjpeg($ImageFile);
    elseif ($ext=="png")
        $img=imagecreatefrompng($ImageFile);
    elseif ($ext=="gif")
        $img=imagecreatefromgif($ImageFile);
    else
        return false;
    list($w,$h)=getimagesize($ImageFile);
    $dstimg=imagecreatetruecolor(140,100);

    imagealphablending($dstimg, false);
    imagecopyresampled($dstimg,$img,0,0,0,0,140,100,$w,$h);
    imagesavealpha($dstimg, true);
    imagepng($dstimg,$ImageFile);
    return true;
}

This is the function I use to resize a PNG but preserve transparency, if it doesnt help, tell me to extract the parts necessary for you:

function Resize($ImageFile,$OriginalFile)
{
    $ext=basename($OriginalFile);
    $ext=explode(".",$ext);
    $ext=array_pop($ext);
    $ext=strtolower($ext);
    if ($ext=="jpg" or $ext=="jpeg" or $ext=="jpe")
        $img=imagecreatefromjpeg($ImageFile);
    elseif ($ext=="png")
        $img=imagecreatefrompng($ImageFile);
    elseif ($ext=="gif")
        $img=imagecreatefromgif($ImageFile);
    else
        return false;
    list($w,$h)=getimagesize($ImageFile);
    $dstimg=imagecreatetruecolor(140,100);

    imagealphablending($dstimg, false);
    imagecopyresampled($dstimg,$img,0,0,0,0,140,100,$w,$h);
    imagesavealpha($dstimg, true);
    imagepng($dstimg,$ImageFile);
    return true;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文