You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PHP调整变量中图片大小并保持宽高比

处理变量中图片的GD库缩放方案

原代码仅支持磁盘文件,要适配变量中的图片二进制字符串,只需修改图片尺寸获取和源图像创建的逻辑,核心改动如下:

修改后的完整代码

function resize_image_from_string($imageData, $w, $h, $crop = FALSE) {
    // 从图片二进制字符串获取尺寸
    list($width, $height) = getimagesizefromstring($imageData);
    if (!$width || !$height) {
        return FALSE; // 无效图片数据返回错误
    }

    $r = $width / $height;
    if ($crop) {
        if ($width > $height) {
            $width = ceil($width - ($width * abs($r - $w/$h)));
        } else {
            $height = ceil($height - ($height * abs($r - $w/$h)));
        }
        $newwidth = $w;
        $newheight = $h;
    } else {
        if ($w/$h > $r) {
            $newwidth = $h * $r;
            $newheight = $h;
        } else {
            $newheight = $w / $r;
            $newwidth = $w;
        }
    }

    // 从二进制字符串创建GD图像资源(自动识别JPG/PNG/GIF等格式)
    $src = imagecreatefromstring($imageData);
    if (!$src) {
        return FALSE;
    }

    $dst = imagecreatetruecolor($newwidth, $newheight);
    imagecopyresampled($dst, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

    // 释放源图像资源,避免内存泄漏
    imagedestroy($src);

    return $dst;
}

关键改动说明

  • 替换尺寸获取函数:用getimagesizefromstring()替代getimagesize(),直接从变量中的二进制字符串提取宽高(PHP 5.4+支持)
  • 替换图像创建方式:用imagecreatefromstring()替代imagecreatefromjpeg(),该函数自动识别图片格式,兼容JPG、PNG、GIF等GD支持的类型,无需单独处理不同格式
  • 增加错误判断:对无效图片数据返回FALSE,避免后续逻辑报错
  • 优化内存管理:手动释放源图像资源imagedestroy($src),减少内存占用

调用示例

假设$imageBinary是存储在变量中的图片二进制数据(比如从数据库读取、API返回或上传时的临时变量):

// 示例:获取变量中的图片数据
$imageBinary = file_get_contents('php://input'); // 或从数据库字段、缓存中获取
$resizedImg = resize_image_from_string($imageBinary, 200, 200, TRUE);

// 如果需要输出图片到浏览器
header('Content-Type: image/jpeg');
imagejpeg($resizedImg);
imagedestroy($resizedImg);

内容的提问来源于stack exchange,提问作者user6631314

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 07:15:59