在不损失质量和透明度的情况下调整PNG的大小


Resize PNG without losing quality and transparency

我必须调整图像大小,因为我们上传了可打印的高分辨率图像,而预览时人们不需要4000px以上的图像。一些图像使用rgb颜色空间"eci",而另一些则使用颜色空间srgb。srgb文件没有任何问题,但eci看起来比以前有点无色。当我上传一张透明的图片时,它并不是完全透明的。有什么解决办法吗?当我调整大小和它的png图像,我使用以下额外的功能。

private function imagetranstowhite($trans) {
    // Create a new true color image with the same size
    $w = imagesx($trans);
    $h = imagesy($trans);
    $white = imagecreatetruecolor($w, $h);
    // Fill the new image with white background
    $bg = imagecolorallocate($white, 255, 255, 255);
    imagefill($white, 0, 0, $bg);
    // Copy original transparent image onto the new image
    imagecopy($white, $trans, 0, 0, 0, 0, $w, $h);
    return $white;
}

有人有解决方案吗?Imagemagick而不是gdlib也可以。

对于将来有同样问题的人。我通过停止使用imagegd并切换到ImageMagick解决了这个问题。所有图像仍然是透明的,u可以使用正确的ICC配置文件将cmyk图像轻松转换为sRGB

实际上不要让PNG变大。相反,从你需要的PNG分辨率开始,然后根据需要缩小它。这样,你就可以将决议保留在PNG上,之后再也不用再搞砸了。这是最快、最简单、最好的解决方案。