PHP簡單實(shí)現(xiàn)圖片格式轉(zhuǎn)換(jpg轉(zhuǎn)png,gif轉(zhuǎn)png等)
需求
開發(fā)過程中總會遇到一些需求需要對圖片格式進(jìn)行轉(zhuǎn)換。比如 gif轉(zhuǎn)png,jpg轉(zhuǎn)png
如最近使用某平臺的圖片文件識別,居然不支持gif格式,那么就需要將gif處理成png等。
依賴
php擴(kuò)展 gd 和 exif
實(shí)現(xiàn)
/**
* 圖片格式轉(zhuǎn)換
* @param string $image_path 文件路徑或url
* @param string $to_ext 待轉(zhuǎn)格式,支持png,gif,jpeg,wbmp,webp,xbm
* @param null|string $save_path 存儲路徑,null則返回二進(jìn)制內(nèi)容,string則返回true|false
* @return boolean|string $save_path是null則返回二進(jìn)制內(nèi)容,是string則返回true|false
* @throws Exception
* @author klinson <klinson@163.com>
*/
function transform_image($image_path, $to_ext = 'png', $save_path = null)
{
if (! in_array($to_ext, ['png', 'gif', 'jpeg', 'wbmp', 'webp', 'xbm'])) {
throw new \Exception('unsupport transform image to ' . $to_ext);
}
switch (exif_imagetype($image_path)) {
case IMAGETYPE_GIF :
$img = imagecreatefromgif($image_path);
break;
case IMAGETYPE_JPEG :
case IMAGETYPE_JPEG2000:
$img = imagecreatefromjpeg($image_path);
break;
case IMAGETYPE_PNG:
$img = imagecreatefrompng($image_path);
break;
case IMAGETYPE_BMP:
case IMAGETYPE_WBMP:
$img = imagecreatefromwbmp($image_path);
break;
case IMAGETYPE_XBM:
$img = imagecreatefromxbm($image_path);
break;
case IMAGETYPE_WEBP: //(從 PHP 7.1.0 開始支持)
$img = imagecreatefromwebp($image_path);
break;
default :
throw new \Exception('Invalid image type');
}
$function = 'image'.$to_ext;
if ($save_path) {
return $function($img, $save_path);
} else {
$tmp = __DIR__.'/'.uniqid().'.'.$to_ext;
if ($function($img, $tmp)) {
$content = file_get_contents($tmp);
unlink($tmp);
return $content;
} else {
unlink($tmp);
throw new \Exception('the file '.$tmp.' can not write');
}
}
}
使用
// 轉(zhuǎn)換后保存在test.png transform_image($url, 'png', './test.png'); transform_image($filepath, 'png', './test.png'); // 轉(zhuǎn)換后二進(jìn)制結(jié)果直接返回 transform_image($url, 'png'); transform_image($filepath, 'png');
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
PHP中數(shù)據(jù)庫單例模式的實(shí)現(xiàn)代碼分享
這篇文章主要介紹了PHP中數(shù)據(jù)庫單例模式的實(shí)現(xiàn)代碼分享,本文先是講解了單例模式的一些知識,然后給出了數(shù)據(jù)庫單例模式實(shí)現(xiàn)代碼,需要的朋友可以參考下2014-08-08
PHP設(shè)計(jì)模式之解釋器(Interpreter)模式入門與應(yīng)用詳解
這篇文章主要介紹了PHP設(shè)計(jì)模式之解釋器(Interpreter)模式,結(jié)合實(shí)例形式詳細(xì)分析了PHP解釋器模式的概念、原理、基本應(yīng)用與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-12-12
ubuntu12.04使用c編寫php擴(kuò)展模塊教程分享
php語言自帶了很多的擴(kuò)展模塊,諸如mbstring、gd、pdo等等。有時為了提高效率,需要用C實(shí)現(xiàn)其中的一些功能,就可以自行編寫php的擴(kuò)展模塊2013-12-12
CI框架源碼解讀之URI.php中_fetch_uri_string()函數(shù)用法分析
這篇文章主要介紹了CI框架源碼解讀之URI.php中_fetch_uri_string()函數(shù)用法,結(jié)合實(shí)例形式分析了CI框架中URL路由機(jī)制的原理與相關(guān)的config配置文件設(shè)置方法,需要的朋友可以參考下2016-05-05
Laravel 5.5中為響應(yīng)請求提供的可響應(yīng)接口詳解
這篇文章主要給大家介紹了關(guān)于Laravel 5.5中為響應(yīng)請求提供的可響應(yīng)接口的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-11-11

