使用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
相关产品推荐
相关产品推荐

