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

Resize PNG without losing quality and transparency

我必须调整图像大小,因为我们上传可打印的高分辨率图像,而对于预览,人们不需要 4000 像素以上的图像。一些图像使用 rgb 颜色 space "eci" 和其他使用颜色 space 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 也可以。

实际上,不要让 PNG 变大。相反,从您需要的尽可能大的 PNG 分辨率开始,然后根据需要实际缩小它。这样您就可以将分辨率保持在 PNG 上,之后再也不必弄乱它。这是最快、最简单和最好的解决方案。

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