我们上传的图片大部分是png和jpg,即便是gif都是很少,现在流行webp,就有人想使用这个方法来实现图片文件的上传和转换,本次修改为实验性,建议本地测试或小规模线上测试。
本次修改需要GD库支持imagewebp函数,是否支持请自行百度检测代码进行检测。
涉及到的文件为:/phpcms/libs/classes/attachment.class.php
教程如下:
打开文件,找到
if(!$this->overwrite && file_exists($savefile)) continue;
在其下方增加如下代码
$source_info = getimagesize($file['tmp_name']);
switch($source_info[2]) {
case 1 :
$image = imagecreatefromgif($file['tmp_name']);
break;
case 2 :
$image = imagecreatefromjpeg($file['tmp_name']);
break;
case 3 :
$image = imagecreatefrompng($file['tmp_name']);
break;
default :
return false;
}
然后下方的:
if(@$upload_func($file['tmp_name'], $savefile)) {
修改为:
if(imagewebp($image, $savefile, 100)) {
到此,上传的文件(jpg,png,gif)会通过imagewebp转换为webp类型,但是因为phpcms v9采用了按源文件本身的后缀进行储存,所以你现在得到的文件后缀依旧是你上传的文件后缀,但访问的时候Content-Type已经是image/webp
如果要实现后缀同时修改,就需要向上找到
$temp_filename = $this->getname($fileext);
改成:
$temp_filename = $this->getname('webp');
这样一改,上传的文件后缀都会是webp了,这点需要注意
有问题或者有更完善的方案希望参与进来讨论
周涛博客






