自留地
切勿乱来!
     找回密码

PHPCMS V9 上传图片自动转换为webp的研究

edi 发布于 2025-08-18 16:04 分类:讨论 阅读

我们上传的图片大部分是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了,这点需要注意

有问题或者有更完善的方案希望参与进来讨论

1个回复

  • 用户头像
    if(imagewebp($image, $savefile, 100)) {

    这里的100为压缩质量,以下分别为85,100和原图的文件大小对比
    1755504639-yasuo

    江苏省 2025-08-18 16:10 0条回复 我来回复
2 收藏 (0)

关注互联网发展前沿,关注PHPCMS技术演进,钻研PHPCMS技术开发

问答社区 联系我们
后退
Alt+←
前进
Alt+→
刷新
F5
无法复制?

登录

登录即表示同意本站用户协议隐私政策
©2026 周涛博客 All rights reserved

注册

注册即表示同意本站用户协议隐私政策
©2026 周涛博客 All rights reserved

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

微信扫一扫

微信扫一扫