V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
juneszh
V2EX  ›  PHP

WebP 图片格式真是个巨坑, 折腾了几天 PHP 都不能正常处理, PHP 是最好的语言!

  •  
  •   juneszh · Aug 15, 2015 · 15459 views
    This topic created in 3910 days ago, the information mentioned may be changed or developed.
    最近在撸一个跟微信相关的项目, 涉及到图片上传处理. 微信居然会偶然上传WebP格式的图片.

    服务器环境: PHP 5.5.28, 所有扩展均为最新版本

    试了GD和Imagick两个扩展均不能正常读取:
    Imagick里new完直接为NULL, 后续操作全部报错找不到tmp临时文件;
    GD里使用imagecreatefromwebp读出是泛黄的图片. 后面输出各种格式更是惨不忍睹.
    (stackoverflow里类似的情况: http://stackoverflow.com/questions/26314508/convert-jpg-to-webp-using-imagewebp)

    目前想到唯一可行的使用命令行"dwebp img.webp -o img.jpg"的方法, 先转jpg再处理. 问题是人家为了安全考虑, PHP禁用了exec等命令... 无解中

    PHP是最好的语言!
    PHP是最好的语言!
    PHP是最好的语言!
    24 replies    2015-08-17 10:34:45 +08:00
    anubiskong
        1
    anubiskong  
       Aug 15, 2015
    虽然讨厌php, 但是你的问题确实和php无关
    leopardwei
        2
    leopardwei  
       Aug 15, 2015
    典型的自我催眠,其实我知道楼主不爱 PHP,但必须要用,所以…… 你懂的,:D
    oott123
        3
    oott123  
       Aug 15, 2015 via Android
    为啥为了安全要禁用 exec
    ljbha007
        4
    ljbha007  
       Aug 15, 2015
    assassinpig
        5
    assassinpig  
       Aug 15, 2015
    准备跳坑
    kslr
        6
    kslr  
       Aug 15, 2015
    Imagick webp库装好没
    kslr
        7
    kslr  
       Aug 15, 2015
    @oott123 exec可以执行系统命令,如果系统被入侵,执行个passwd什么的,不过这都什么年代了。
    kiwi95
        8
    kiwi95  
       Aug 15, 2015
    何必用PHP呢,是不是?楼主
    bigdude
        9
    bigdude  
       Aug 15, 2015
    建议楼主多研究研究微信图片链接的参数,很容易就绕过这种问题,不要在这上面钻牛角尖。
    realpg
        10
    realpg  
    PRO
       Aug 15, 2015
    我的环境imagick扩展可以正确处理webp格式,微信过来的颜色也不偏。
    juneszh
        11
    juneszh  
    OP
       Aug 15, 2015
    @realpg 有没有哪里需要注意的?我的imagick怎么弄都支持不了在PHP里读webp, 但是命令行可以操作webp
    realpg
        12
    realpg  
    PRO
       Aug 15, 2015
    @juneszh
    编译imagemagick时候加上相关lib支持webp,然后编译imagick扩展时配置指向本机编译的imagemagick,出来的貌似就直接支持。
    不过我们基本不这么处理webp,性能比较差,都是丢给后台进程处理
    csx163
        13
    csx163  
       Aug 15, 2015
    我看见有项目用七牛处理图片的
    wdlth
        14
    wdlth  
       Aug 15, 2015
    LZ不检查GD和ImageMagick,怪到语言上也没用。
    menc
        15
    menc  
       Aug 15, 2015
    微信URL中的webp改成jpg或者jpeg就是jpg了
    juneszh
        16
    juneszh  
    OP
       Aug 15, 2015
    juneszh
        17
    juneszh  
    OP
       Aug 15, 2015
    @menc
    @bigdude
    这个接口的"下载多媒体"文件怎么通过参数改格式?
    http://mp.weixin.qq.com/wiki/12/58bfcfabbd501c7cd77c19bd9cfa8354.html
    iyaozhen
        18
    iyaozhen  
       Aug 16, 2015
    @juneszh 表示关注,这个接口不应该会获得 webp 格式的图片呀。
    Balthild
        19
    Balthild  
       Aug 16, 2015 via Android
    楼主你不知道php exec可以指定只能执行某个目录中的可执行文件吗?故意黑php有意思吗
    bombless
        20
    bombless  
       Aug 17, 2015 via Android
    嘛,另外开个服务做转换,或者写扩展吧。PHP的C扩展都写不出你敢说你能写PHP?(逃
    juneszh
        21
    juneszh  
    OP
       Aug 17, 2015
    @realpg 感谢!的确是编辑扩展时出了问题, 现在 imagick 在 PHP 可以支持 webp 了.
    juneszh
        22
    juneszh  
    OP
       Aug 17, 2015
    最后总结下: 在 PHP 5.5 中, 对于 WEBP 的支持还是很初级的阶段(可以看到最近的版本更新都有 webp 的 BUG 修复), GD 库真的很多问题, 偏黄移位等等. 目前唯一可用的是 imagick 库, 不过编译时需要先安装 libwebp, 并且编译扩展时要注意点(看 12 楼).

    另外, 一句"PHP 是最好的语言"真是很好的钓鱼句, 也看尽了 PHPer 的众生相.
    break
        23
    break  
       Aug 17, 2015
    @juneszh 下面两个手册内容不知道有没有帮助 php 本身就可以生成 webp 格式的
    http://php.net/manual/zh/function.imagecreatefromwebp.php
    http://php.net/manual/zh/function.imagewebp.php
    juneszh
        24
    juneszh  
    OP
       Aug 17, 2015
    @break 这个就是 GD 库的, 很多问题.
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3005 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 78ms · UTC 14:58 · PVG 22:58 · LAX 07:58 · JFK 10:58
    ♥ Do have faith in what you're doing.