有的时候在某些场景中需要展示特定格式的图片,而在前端无法处理或者不方便处理时,我们只有使用PHP的GD库来解决了。
这边解决的思路是:使用GD库生成网络或本地图片的替换文件到本地。
<?php
/**- @desc 图片格式转换
- @param string $srcFile 原图片地址
- @param string $objFile 保存目标位置
- @param string $to_ext 转换为(后缀)
- @return boolean
- @author Sanplit
*/
function transImg($srcFile, $objPath = \'temp\', $to_ext = \'png\'){
$type = exif_imagetype($srcFile);
switch($type) {
case IMAGETYPE_JPEG:
$srcImg = imagecreatefromjpeg($srcFile);
break;
case IMAGETYPE_PNG:
$srcImg = imagecreatefrompng($srcFile);
break;
case IMAGETYPE_GIF:
$srcImg = imagecreatefromgif($srcFile);
break;
case IMAGETYPE_BMP:
case IMAGETYPE_WBMP:
$srcImg = imagecreatefromwbmp($srcFile);
break;
case IMAGETYPE_XBM:
$srcImg = imagecreatefromxbm($srcFile);
break;
case IMAGETYPE_WEBP: //(从 PHP 7.1.0 开始支持)
$srcImg = imagecreatefromwebp($srcFile);
break;
default:
throw new \\Exception(\'Invalid image type\');
}
$function = \'image\'.$to_ext;
$save_path = __DIR__.\'/\'.$objPath.\'/\'.uniqid().\'.\'.$to_ext;
if ($save_path) {
return $function($srcImg, $save_path);
} else {
$tmp = __DIR__.\'/\'.uniqid().\'.\'.$to_ext;
if ($function($srcImg, $tmp)) {
$content = file_get_contents($tmp);
// unlink($tmp);
return $content;
} else {
// unlink($tmp);
throw new \\Exception(\'the file \'.$tmp.\' can not write\');
}
}
}
$img_url = \'http://image.bee-ji.com/173745\';
$res = transImg($img_url);
var_dump($res); // true or false
返回 true 的时候,查看同目录下的 temp 文件夹内容是否生成所需的文件即可。 具体操作还需根据具体需求调整,转换逻辑大致如此。
注:
exif_imagetype() — 判断一个图像的类型
使用GD库 必须在php.ini中开启 extension=php_gd2
使用exif_imagetype() 必须在php.ini中开启 extension=exif
详情参考:exif_imagetype