我正在寻找一个可以降低所有图像类型质量(PNG、GIF 和 JPEG)的库。
我知道我可以使用 JPEG 来减少imagejpeg()
我也知道我可以使用 PNG 来减少,imagepng()
尽管这还不够强大。
我需要一些可以在不删除 alpha 的情况下将 PNG 24 转换为 PNG8 的东西。
无法使用 ImageMagick,因为我无法在我的服务器上安装任何东西。
编辑:
我还需要可以从 32 位转换为 8 位的东西(我很确定与 32 位相同)
在这里找到灵魂
谢谢
我正在寻找一个可以降低所有图像类型质量(PNG、GIF 和 JPEG)的库。
我知道我可以使用 JPEG 来减少imagejpeg()
我也知道我可以使用 PNG 来减少,imagepng()
尽管这还不够强大。
我需要一些可以在不删除 alpha 的情况下将 PNG 24 转换为 PNG8 的东西。
无法使用 ImageMagick,因为我无法在我的服务器上安装任何东西。
编辑:
我还需要可以从 32 位转换为 8 位的东西(我很确定与 32 位相同)
在这里找到灵魂
谢谢
要将任何 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');
我知道您不想要 GD 库,但使用以下代码:
$img = imagecreatefrompng($src);
imagesavealpha($img, true);
imagepng($img, $dst, 9, PNG_ALL_FILTERS);
imagedestroy($img);
优化后的图片比原始尺寸小了约 40%,并且没有去除 alpha。
您正在寻找多少百分比的优化?
请试试这个,这是你要找的结果吗?
<?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");
根据我使用 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');