5

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

我需要一些可以在不删除 alpha 的情况下将 PNG 24 转换为 PNG8 的东西。

无法使用 ImageMagick,因为我无法在我的服务器上安装任何东西。

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

在这里找到灵魂

谢谢

4

4 回答 4

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');
于 2012-12-16T12:49:14.403 回答
3

我知道您不想要 GD 库,但使用以下代码:

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

优化后的图片比原始尺寸小了约 40%,并且没有去除 alpha。

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

于 2012-12-11T22:16:47.790 回答
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");  
于 2012-12-13T21:25:37.263 回答
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');
于 2012-12-15T21:45:00.433 回答