如何使用PHP压缩图像并保存质量

时间:2019-04-15 16:40:49

标签: php webp

我想使用PHP压缩网站上的图像,以对其进行优化并使其在加载时更快。

因此,我尝试进行搜索,然后找到了一个生成WebP图像的函数。压缩图像并减小其大小并节省质量真的很好。

$file = 'test.jpg';
$image = imagecreatefrompjpeg($file);
imagewebp($image, 'tes.webp', 80);
imagedestroy($image);

但是,在搜索之后,我发现许多浏览器都不支持WebP扩展,这可能会带来很大的问题。

那么,有什么解决方案可以使用PHP节省图像质量吗?

2 个答案:

答案 0 :(得分:0)

您需要查看this。易于使用的PHP库。 已经具有大小调整,压缩,调整方法,您可以创建不同高度×宽度的图像。     `$ imgrequire'vendor / autoload.php';

// import the Intervention Image Manager Class
use Intervention\Image\ImageManagerStatic as Image;

// configure with favored image driver (gd by default)
Image::configure(array('driver' => 'imagick')); = 
Image::make($_FILES['image']['tmp_name']);

// resize image
$img->fit(300, 200);

// save image
$img->save('foo/bar.jpg');`

答案 1 :(得分:0)

好吧,您没有使用上面设置的选项保存质量,因为您将质量设置为80,

您可以使用PHP Imagick在运行时调整图像的大小,也可以不压缩直接保存图像,并使用cron脚本执行操作或由Web服务器本身执行。

要使用JPG,可以考虑以下选项:

    $compression = 80; // set from 75-85 generally
    $iMagick->setImageCompressionQuality($compression);
    $iMagick->setImageFormat("jpg");
    $iMagick->stripImage(); // saves lot by removing meta

示例(请注意,此示例将调整为最大1920宽度):

$iMagick = new Imagick($file);
$iMagick->setImageResolution(72,72);
$iMagick->resampleImage(72,72,imagick::FILTER_UNDEFINED,1);
$geometry = $iMagick->getImageGeometry();
if ($geometry['height'] > 1920 || $geometry['width'] > 1080) {
    $iMagick->scaleImage(1920, 0);
    if($geometry['height'] > $resizeHeight) {
        $iMagick->scaleImage(0, 1080);
    }
}
$iMagick->setImageCompression(Imagick::COMPRESSION_JPEG);
$iMagick->setImageCompressionQuality($compression);
$iMagick->setImageFormat("jpg");
$iMagick->stripImage();
$iMagick->writeImage($file);
$Imagick->clear();