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





- End -




(2)
PHP

我来吐槽

*

*