了解php webp

1011人浏览   2023-10-23 14:27:37

由于项目要求需要将jpg、png类型的图片 转换成webp格式,最开始使用了php gd类库里 imagewebp 方法实现,结果发现转换成的webp格式文件会偶尔出现空白内容的情况。像创建了一个透明图层的图片,但是尺寸和内存确跟转换成功的文件一般无二。

初想,可以找个办法判断一下图片是否无效的,网上找各种办法,结果无果。虽然失败了但是还是上一下代码,期待大神能协助完善方法。


function imgToWebp($file=''){

if(is_file($file)){

$img = getimagesize($file);

$type = $img['mime'];

if($type == 'image/jpeg'){

$file_source = imagecreatefromjpeg($file);

}

elseif($type == 'image/png'){

$file_source = imagecreatefrompng($file);

}

else{

return false;

}

$i = strripos($file,'.');

$newFileName = substr($file,0,$i+1).'webp';

$ret = imagewebp($file_source,$newFileName,'80');

return $ret;

}

}


使用前提条件为,php版本>=5.5 以上,并且开启gd类库。

上面这个方法的成功率不怎么高,欢迎指错。由于成功率不高,我果断换了实现方式。

既然php无法帮助我完成任务,自然要让linux上的第三方类库帮我实现格式转换,所以找到了 libwebp库。

1.首先安装类型支持

#ubuntu

apt-get install webp

#centos

yum -y install libwebp-devel libwebp-tools

安装完毕你的系统中将获得三个工具(另外 vwebp、webpmux 待学习中)

1. cwebp 如需帮助请 cwebp --help,贴一条示例转换命令:

cwebp -q 50 ~/***.jpg -o ***.webp

2. dwebp 将webp文件转换成jgp、png,同上帮助:dwebp --help

dwebp ~/***.webp -o ~/***.png

3. gif2webp gif图片资源转成webp

cwebp -q 50 ~/***.gif -o ***.webp

有了系统的类库支持,程序直接抛命令给linux处理就可以了,我这用的是php,记得要是线上模式你的php环境可能已经把exec、system等函数禁用了,查看你的php.ini,disable_funcitons配置项。提醒:禁用函数开启将增加服务器的安全风险,所以还请程序中做好参数的校验工作,确保你的过滤后命令不会造成不必要的损失。

欢迎大牛随时批评及指正!!!

另外需要确定你的服务器上安装了 libpng、libjpeg等支持包。


相关推荐