一:背景
在做一个小程序项目的时候,采集了微信公众号的图片到小程序显示,发现安卓的可以显示,ios显示不了。后来发现是因为图片格式是webp导致
苹果在macOS Sierra及iOS 10的早期beta版本中加入了WebP支持。而在2016年9月7日发布的iOS 10和macOS Sierra GM种子版本中却移除了WebP的支持。
二:解决办法
现在就是需要在采集的时候,把webp格式的图片转为jpg,转换方式有两种。
第一种使用GD,但是GD库需要支持webp,如下图所示
如果不支持webp,就会报错imagecreatefromwebp not found
代码如下:
if(function_exists('imagecreatefromwebp')) {
$im = imagecreatefromwebp($rootFile);
imagejpeg($im, $rootFile, 100);
imagedestroy($im);
}
这种方式,比较简单但是占用内存比较大,而且图片转换之后可能会有发黄现象。
第二种 是使用Imagick,这种方式需要安装imagick,并且imageick需要支持webp格式
安装教程:https://www.cnblogs.com/dreamydeng/p/6806956.html
代码:
if(strpos($imageurl,'tp=webp') !== false) {//如果是webp类型图片,转成jpg格式
$image = new \Imagick();
$image->readImage(realpath($rootFile));
$image->setImageFormat("jpg");
$image->writeImage();
$image->clear();
}
这种方式占用内存下,图片质量高,但是安装imageick的坑比较多,慎重
注意点:1.安装iamgick,软件,dll文件和php这三个的版本要对应好
2.可能你安装好phpinfo显示了,php --ri imagick也有了,但是还是报错直接无响应。这个时候要注意你的imagick是否支持你使用的图片格式