PHP生成略缩图

/**
 * 生成缩略图(等比例缩放)
 * @param string $file 原图的路径
 * @param int $limit 缩略图最大限制宽和高(像素)
 * @return resource
*/
function thumb($file, $limit)
{
    $info = getimagesize($file);    // 获取原图信息
    list($src_w, $src_h) = $info;   // 获取原图宽高
    $mime = $info['mime'];          // 获取原图MIMI类型
    // 先将目标宽高设置为原图宽高,若判断不成立,则说明原图宽高低于限制值,无需缩放
    list($dst_w, $dst_h) = [$src_w, $src_h];
    if ($src_w / $limit > $src_h / $limit) {
        if ($src_w > $limit) {      // 当宽度较大时,如果超出限制,则按宽进行缩放
            $dst_w = $limit;
            $dst_h = round($dst_w * $src_h / $src_w);
        }
    } else {
        if ($src_h > $limit) {      // 当高度较大时,如果超出限制,则按高进行缩放
            $dst_h = $limit;
            $dst_w = round($dst_h * $src_w / $src_h);
        }
    }
    $src = $GLOBALS['func'][$mime]($file);          // 依据原图路径创建图像画布资源
    $dst = imagecreatetruecolor($dst_w, $dst_h);    // 创建目标缩略图资源
    // 将原图缩放填充到缩略图画布中
    imagecopyresampled($dst, $src, 0, 0, 0, 0, $dst_w, $dst_h, $src_w, $src_h);
    return $dst;
}

//根据MIME类型区分对应的图像格式和处理函数
//第一个参数$file表示图片的路径 第二个参数用于区分创建资源还是输出资源
$func = [
    'image/png' => function ($file, $img = null) {
        return $img ? imagepng($img) : imagecreatefrompng($file);
    },
    'image/jpeg' => function ($file, $img = null) {
        return $img ? imagejpeg($img) : imagecreatefromjpeg($file);
    },
    'image/gif' => function ($file, $img = null) {
        return $img ? imagegif($img) : imagecreatefromgif($file);
    }
];

测试PHP生成略缩图是否成功:

<?php
require_once './thumb.php';

$path = './uploads/1.jpg';               // 保存原图的路径
$mime = getimagesize($path)['mime'];    // 获取原图的MIME
$thumb = thumb($path, 200);             // 生成缩略图资源
header("Content-Type: $mime");          // 指定输出图像的MIME
$func[$mime]($path,$thumb);             // 根据原图MIME输出缩略图 
//相当于 imagejpeg($thumb); 
?>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值