zoukankan      html  css  js  c++  java
  • phpcms v9图片生成缩略图变成黑色解决方法

    今天客户反映,上传的图片生成缩略图有的图片变成黑色,


    出现问题就百度了一下,有不少网友也遇到这样的问题,但是官方论坛也没有给出解决办法,那还得靠自己解决了,于是就研究phpcms v9 图片压缩代码。

    打开phpcmslibsclassesimage.class.php,看了半天也没有看出哪里的错误。

    网上有很多关于php  png图片压缩变成黑色的问题,我刚开始也以为是这样问题,但是v9的源码里做了这样问题的处理,所以排除这个原因。

    突然想到了错误日志,打开cacheserror_log.php 错误日志,发现问题了。

    09-05 12:03:43 | 2 | imagecreatefrompng(): '/alidata/www/uploadfile/2016/0719/thumb_506_351_20160704061846270.png' is not a valid PNG file | phpcms/libs/classes/image.class.php | 102 


    一眼看到这样错误,我就知道什么错误,原因是这张图片后缀是png图片,但实质不是png图片,应该是其他类型图片人为修改为png图片,为了验证这一点,我写了一段代码验证一下,代码如下:

     

     
    $url="http://www.xxxx.com/uploadfile/2016/0719/thumb_506_351_20160704061846270.png"; 
    print_r(getimagesize($url)); 
    print_r("<br/>"); 
    print_r(pathinfo($url)); 
    



    输出结果如下:

    Array ( [0] => 506 [1] => 351 [2] => 2 [3] => width="506" height="351" [bits] => 8 [channels] => 3 [mime] => image/jpeg )  
    Array ( [dirname] => http://www.xxxx.com/uploadfile/2016/0719 [basename] => thumb_506_351_20160704061846270.png [extension] => png [filename] => thumb_506_351_20160704061846270 ) 


    大家看到了 mime   和 extension了没有??

    再来看一下v9的源码



    v9里使用pathinfo来获取图片的后缀,这样导致很多图片是人为修改的后缀图片,在使用imagecreatefrom 函数 (imagecreatefromgif,imagecreatefromjpeg,imagecreatefrompng)创建画布的时候选错函数。

    解决方法:

    注销掉80行:$type =  $pathinfo['extension'];  就ok了。

    $info['type'] 上面函数已经获取到了图片mime扩展类型。

  • 相关阅读:
    LeetCode 078. 子集 dfs
    LeetCode 404. 左叶子之和 树遍历
    LeetCode 226. 翻转二叉树 递归
    C# String.Format大全 去 decimal 后面的 0
    HTML readyState 属性 iframe onreadystatechange事件
    crm 4 IFRAME 元素隐藏
    在MS CRM 4.0中引用JS文件
    crm 4 隐藏自定义 toolbar
    crm 4 UserHasRole
    微信JSSDK上传多张图片
  • 原文地址:https://www.cnblogs.com/feng18/p/6132730.html
Copyright © 2011-2022 走看看