1. 使用GD库进行PNG压缩
<?php
function compressPNG($source, $destination, $quality = 9) {
list($width, $height) = getimagesize($source);
$image = imagecreatefrompng($source);
// 调整压缩质量
ob_start();
imagepng($image, null, $quality);
$png_compressed = ob_get_contents();
ob_end_clean();
// 写入压缩后的图片
imagepng($image, $destination);
}
?>
在这个例子中,compressPNG函数接受源文件路径、目标文件路径和可选的压缩质量参数。压缩质量范围从0(无压缩)到9(最大压缩)。使用imagepng函数时,第二个参数为null表示不指定压缩级别,而第三个参数指定了压缩质量。
2. 利用PHP的ImageMagick扩展
<?php
function compressPNGWithImageMagick($source, $destination, $quality = 9) {
$cmd = escapeshellcmd("convert -quality {$quality} {$source} {$destination}");
system($cmd);
}
?>
3. 使用在线服务
<?php
function compressPNGOnline($source, $destination, $quality = 9) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "https://api.compressorjs.com/compress");
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, [
'file' => new CURLFile($source),
'quality' => $quality
]);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
curl_close($curl);
file_put_contents($destination, $response);
}
?>
在这个例子中,compressPNGOnline函数使用CURL库向在线服务发送请求,上传文件并接收压缩后的数据。
4. 优化颜色和透明度
<?php
function removeTransparencyFromPNG($source, $destination) {
$image = imagecreatefrompng($source);
$width = imagesx($image);
$height = imagesy($image);
$color = imagecolorallocatealpha($image, 0, 0, 0, 127);
imagefill($image, 0, 0, $color);
imagecolortransparent($image, $color);
imagepng($image, $destination);
imagedestroy($image);
}
?>