在不损失质量和透明度的情况下调整 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
我必须调整图像大小,因为我们上传可打印的高分辨率图像,而对于预览,人们不需要 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