phpcms v9圖片生成縮略圖變成黑色解決方法


今天客戶反映,上傳的圖片生成縮略圖有的圖片變成黑色,


出現問題就百度了一下,有不少網友也遇到這樣的問題,但是官方論壇也沒有給出解決辦法,那還得靠自己解決了,於是就研究phpcms v9 圖片壓縮代碼。

打開\phpcms\libs\classes\image.class.php,看了半天也沒有看出哪里的錯誤。

網上有很多關於php  png圖片壓縮變成黑色的問題,我剛開始也以為是這樣問題,但是v9的源碼里做了這樣問題的處理,所以排除這個原因。

突然想到了錯誤日志,打開\caches\error_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擴展類型。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM