PHP使用GD库实现转换图片格式

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





PHP

我来吐槽

*

*