我正在寻找一个可以降低所有图像类型质量的库(PNG,GIF和JPEG)
我知道我可以使用imagejpeg()
来减少JPEG
我也知道我可以使用imagepng()
来减少PNG,尽管这还不够强大。
我需要能够在不删除alpha的情况下将PNG 24转换为PNG8的内容。
无法使用ImageMagick,因为我无法在服务器上安装任何内容。
编辑:
我还需要一些可以从32位转换为8位的东西(我很确定它与32位相同)
找到了灵魂here
由于
答案 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');