PHP减少所有图像类型的质量

时间:2012-12-07 17:26:38

标签: php image compression image-compression

我正在寻找一个可以降低所有图像类型质量的库(PNG,GIF和JPEG) 我知道我可以使用imagejpeg()来减少JPEG 我也知道我可以使用imagepng()来减少PNG,尽管这还不够强大。

我需要能够在不删除alpha的情况下将PNG 24转换为PNG8的内容。

无法使用ImageMagick,因为我无法在服务器上安装任何内容。

编辑:
我还需要一些可以从32位转换为8位的东西(我很确定它与32位相同)

找到了灵魂here

由于

4 个答案:

答案 0 :(得分:5)

要将任何PNG图像转换为8位PNG,请使用此功能,我刚刚创建了

function convertPNGto8bitPNG()

  function convertPNGto8bitPNG($sourcePath, $destPath) {
    $srcimage = imagecreatefrompng($sourcePath);
    list($width, $height) = getimagesize($sourcePath);
    $img = imagecreatetruecolor($width, $height);
    $bga = imagecolorallocatealpha($img, 0, 0, 0, 127);
    imagecolortransparent($img, $bga);
    imagefill($img, 0, 0, $bga);
    imagecopy($img, $srcimage, 0, 0, 0, 0, $width, $height);
    imagetruecolortopalette($img, false, 255);
    imagesavealpha($img, true);
    imagepng($img, $destPath);
    imagedestroy($img);
    }

参数

$ sourcePath - 源PNG文件的路径 $ destPath - 目标PNG文件的路径 使用

convertPNGto8bitPNG('pfc.png', 'pfc8bit.png');

答案 1 :(得分:3)

我知道你不想要GD库,但使用这段代码:

$img = imagecreatefrompng($src);
imagesavealpha($img, true);
imagepng($img, $dst, 9, PNG_ALL_FILTERS);
imagedestroy($img);

优化的图片比原始尺寸小40%,并且不会移除alpha。

您在寻找的优化百分比是多少?

答案 2 :(得分:2)

请试试这个,这是你要找的结果吗?

<?php
$size = getimagesize("original.png");
$source = imagecreatefrompng("original.png");
$target = imagecreate($size[0], $size[1]);
imagecopy($target, $source, 0, 0, 0, 0, $size[0], $size[1]);
imagepng($target,"copy.png");  

答案 3 :(得分:2)

通过PHP的经验,我在图像处理方面总是遇到一些困难(使用GD,标准库) 我相信没有任何PHP扩展未指出。我建议你使用一些便于工作的扩展,例如:ImageMagick

安装扩展程序后,请尝试以下操作:

# Load your image
$im = new Imagick('your-png32-image.png'); 
# Set quality/colors
$im->setImageFormat('PNG8');
$colors = min(255, $im->getImageColors());
$im->quantizeImage($colors, Imagick::COLORSPACE_RGB, 0, false, false);
# 8bits
$im->setImageDepth(8);
# Save image
$im->writeImage('your-png8-image.png');