使用PHP在服务器上压缩jpeg图片

13

我有一个包含大约1500张JPEG图像的网站,我想将它们全部压缩。浏览目录不是问题,但我似乎找不到一个可以压缩已经存在于服务器上的JPEG图片并替换旧图片的函数(我不想上传新的图片)。

PHP是否具有内置的此类功能?如果没有,我该如何将文件夹中的JPEG读取到脚本中?

谢谢。


2
你所说的“压缩”具体指什么?如果你是指使用较低质量打开并重新保存每个文件,请非常小心选择工具。PHP内置的GD库的质量与文件大小比例并不是很好。你能否提供更多关于你尝试做什么的上下文信息? - Pekka
4个回答

25

我更喜欢使用IMagick扩展来处理图像。GD对于较大的文件使用太多内存。以下是PHP手册中Charles Hall提供的代码片段:

$img = new Imagick();
$img->readImage($src);
$img->setImageCompression(Imagick::COMPRESSION_JPEG);
$img->setImageCompressionQuality(90);
$img->stripImage();
$img->writeImage($dest); 
$img->clean();

25

你没有说明是否使用了GD库,所以我假设你使用了它。

$img = imagecreatefromjpeg("myimage.jpg");   // load the image-to-be-saved

// 50 is quality; change from 0 (worst quality,smaller file) - 100 (best quality)
imagejpeg($img,"myimage_new.jpg",50);

unlink("myimage.jpg");   // remove the old image

imagecreatefromjpeg函数中的参数是源吗?也就是说,我可以将文件路径作为参数传递吗? - Meir
是的,您可以同时为imagecreatefromjpeg和imagejpeg以及unlink提供路径。 - user1299518
10
这并不是真正的图像压缩!反而会降低质量。 - Ema4rl

0

vlzvl提供的解决方案很好用。不过,使用这个解决方案,你还可以通过改变代码的顺序来覆盖一张图片。

    $image = imagecreatefromjpeg("image.jpg");  
    unlink("image.jpg");
   imagejpeg($image,"image.jpg",50);

这可以让您压缩现有的图像并将其存储在相同的位置和相同的文件名中。


当使用相同的文件名时,imagejpeg()默认会覆盖原始图像吗? - Matt

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接