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

如何实现用户点击下载时,按指定x*y分辨率下载图片而非原图

实现指定分辨率图片下载的调整方案

核心逻辑:你当前直接链接原图的实现只能下载原始分辨率文件,要输出指定分辨率的版本,需新增后端图片缩放处理接口,再调整前端下载链接指向该接口即可。


第一步:新增后端图片处理接口

在站点根目录新建resize_download.php文件,代码如下:

<?php
// 基础配置
$imageDir = __DIR__ . '/images/'; // 对应你站点原图存储的路径
$allowedExt = ['jpg', 'jpeg', 'png', 'gif']; // 允许处理的图片格式
$maxWh = 2000; // 限制最大宽高,避免恶意请求占用服务器资源

// 接收请求参数
$imageName = $_GET['name'] ?? '';
$width = (int)($_GET['w'] ?? 400);
$height = (int)($_GET['h'] ?? 400);

// 参数合法性校验
if (
    empty($imageName) || $width <= 0 || $height <=0
    || $width > $maxWh || $height > $maxWh
) {
    die('非法请求参数');
}
$sourcePath = $imageDir . $imageName;
if (!file_exists($sourcePath)) {
    die('请求图片不存在');
}
$ext = strtolower(pathinfo($sourcePath, PATHINFO_EXTENSION));
if (!in_array($ext, $allowedExt)) {
    die('不支持的图片格式');
}

// 加载原图资源
switch ($ext) {
    case 'jpg':
    case 'jpeg':
        $sourceImg = imagecreatefromjpeg($sourcePath);
        break;
    case 'png':
        $sourceImg = imagecreatefrompng($sourcePath);
        break;
    case 'gif':
        $sourceImg = imagecreatefromgif($sourcePath);
        break;
}
list($srcW, $srcH) = getimagesize($sourcePath);

// 生成指定分辨率的图片
$targetImg = imagecreatetruecolor($width, $height);
// 兼容png透明背景
if ($ext == 'png') {
    imagealphablending($targetImg, false);
    imagesavealpha($targetImg, true);
}
imagecopyresampled($targetImg, $sourceImg, 0, 0, 0, 0, $width, $height, $srcW, $srcH);

// 输出下载响应头
header('Content-Type: image/' . $ext);
$downloadName = pathinfo($imageName, PATHINFO_FILENAME) . "_{$width}x{$height}." . $ext;
header('Content-Disposition: attachment; filename="' . $downloadName . '"');

// 输出处理后的图片
switch ($ext) {
    case 'jpg':
    case 'jpeg':
        imagejpeg($targetImg, null, 90); // 90为jpeg质量参数,可自行调整
        break;
    case 'png':
        imagepng($targetImg);
        break;
    case 'gif':
        imagegif($targetImg);
        break;
}

// 销毁内存资源
imagedestroy($sourceImg);
imagedestroy($targetImg);
exit;
?>

第二步:调整前端下载按钮代码

将你原有下载按钮的链接改为指向上述处理接口,同时传入对应参数即可:

<a href="resize_download.php?name=<?php echo $row['image_name'] ?>&w=400&h=400" class="ms-5" download>
    <i class="bi bi-download" style="color: black; font-size:20px"></i>
</a>

额外注意事项

  • 请确保resize_download.php和images文件夹的路径对应,避免读取图片失败
  • 高并发场景建议增加已处理图片的本地缓存,重复请求同分辨率同图片时直接返回缓存文件,无需重复生成
  • 如果需要支持用户自选分辨率,将链接中w和h的固定值改为动态参数即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:15:03