由於項目要求需要將jpg、png類型的圖片 轉換成webp格式,最開始使用了php gd類庫里 imagewebp 方法實現,結果發現轉換成的webp格式文件會偶爾出現空白內容的情況。像創建了一個透明圖層的圖片,但是尺寸和內存確跟轉換成功的文件一般無二。
初想,可以找個辦法判斷一下圖片是否無效的,網上找各種辦法,結果無果。雖然失敗了但是還是上一下代碼,期待大神能協助完善方法。
function imgToWebp($file=''){ if(is_file($file)){ $img = getimagesize($file); $type = $img['mime']; if($type == 'image/jpeg'){ $file_source = imagecreatefromjpeg($file); } elseif($type == 'image/png'){ $file_source = imagecreatefrompng($file); } else{ return false; } $i = strripos($file,'.'); $newFileName = substr($file,0,$i+1).'webp'; $ret = imagewebp($file_source,$newFileName,'80'); return $ret; } }
使用前提條件為,php版本>=5.5 以上,並且開啟gd類庫。
上面這個方法的成功率不怎么高,歡迎指錯。由於成功率不高,我果斷換了實現方式。
既然php無法幫助我完成任務,自然要讓linux上的第三方類庫幫我實現格式轉換,所以找到了 libwebp庫。
1.首先安裝類型支持
#ubuntu apt-get install webp #centos yum -y install libwebp-devel libwebp-tools
安裝完畢你的系統中將獲得三個工具(另外 vwebp、webpmux 待學習中)
1. cwebp 如需幫助請 cwebp --help,貼一條示例轉換命令:
cwebp -q 50 ~/***.jpg -o ***.webp
2. dwebp 將webp文件轉換成jgp、png,同上幫助:dwebp --help
dwebp ~/***.webp -o ~/***.png
3. gif2webp gif圖片資源轉成webp
cwebp -q 50 ~/***.gif -o ***.webp
有了系統的類庫支持,程序直接拋命令給linux處理就可以了,我這用的是php,記得要是線上模式你的php環境可能已經把exec、system等函數禁用了,查看你的php.ini,disable_funcitons配置項。提醒:禁用函數開啟將增加服務器的安全風險,所以還請程序中做好參數的校驗工作,確保你的過濾后命令不會造成不必要的損失。
歡迎大牛隨時批評及指正!!!
另外需要確定你的服務器上安裝了 libpng、libjpeg等支持包。