有的时候在某些场景中需要展示特定格式的图片,而在前端无法处理或者不方便处理时,我们只有使用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