php 生成 webp,PHP - Manual: imagewebp (官方文档)

WebP is a great file format, but it's basically supported only by Chrome. For WebP files with transparency it's necessary to have PNG fallback for other browsers (otherwise it won't work in iOS, Firefox, IE, etc.).

Regular truecolor PNG with alpha gives pretty large files, but there's a special smaller PNG file variant that can be created by pngquant - a command line utility.

If you have pngquant 1.8 on your server (just get package from official pngquant website), then you can create small fallback images (with quality better than from PHP's libgd):

* Optimizes PNG file with pngquant 1.8 or later (reduces file size of 24-bit/32-bit PNG images).

*

* You need to install pngquant 1.8.x on the server (ancient version 1.0 won't work).

* There's package for Debian/Ubuntu and RPM for other distributions on http://pngquant.org

*

* @param $path_to_png_file string - path to any PNG file, e.g. $_FILE['file']['tmp_name']

* @param $max_quality int - conversion quality, useful values from 60 to 100 (smaller number = smaller file)

* @return string - content of PNG file after conversion

*/functioncompress_png($path_to_png_file,$max_quality=90)

{

if (!file_exists($path_to_png_file)) {

throw newException("File does not exist:$path_to_png_file");

}// guarantee that quality won't be worse than that.$min_quality=60;// '-' makes it use stdout, required to save to $compressed_png_content variable

// '

// escapeshellarg() makes this safe to use with any path$compressed_png_content=shell_exec("pngquant --quality=$min_quality-$max_quality- < ".escapeshellarg($path_to_png_file));

if (!$compressed_png_content) {

throw newException("Conversion to compressed PNG failed. Is pngquant 1.8+ installed on the server?");

}

return$compressed_png_content;

}?>

So for example when user is uploading a PNG file:

$read_from_path=$_FILE['file']['tmp_name'];$save_to_path="uploads/compressed_file.png";$compressed_png_content=compress_png($read_from_path);file_put_contents($save_to_path,$compressed_png_content);// you don't need move_uploaded_file().

// and for webp:imagewebp(imagecreatefrompng($read_from_path),$save_to_path+".webp");?>

And then you can use URL with .webp version in Chrome and browsers that send Accept: image/webp, and .png for the rest (and all will get small file!)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值