ImageResizer自动缩小

本文关键字:缩小 ImageResizer | 更新日期: 2023-09-27 18:15:14

我们已经实现了ImageResizer的基本服务器,但是我们还有一个需求。我们正在处理用户上传的图像。有时用户想要上传5MB, 10MB,甚至30MB的图像(有些来自监控录像,这是意料之中的)。但是我们不想在超过某个阈值时存储完整的图像大小。我不是图像专家-也许我们应该使用客户端ImageResizer API并设置dpi,或者maxwidth/maxheight?缩小图像大小的最佳实践是什么?

查看FileContentLength和做a ?maxwidth=1000&maxheight=1000如果超过一些指定的尺寸?

查看图像的宽度/高度并相应地缩小?目前ImageResizer没有办法"获取"图像尺寸。

我看到了这篇文章,但我们显然不想在缩略图(150 × 150)上这样做。

ImageResizer自动缩小

您是否关心文件大小或类型/分辨率?如果是前者,只需执行

if (post.FileContentLength > MAX_SIZE){ 
  //Use ImageResizer
}else{
  //store as-is
}

否则,始终使用ImageResizer并指定&maxwidth=3200&maxheight=3200

如果您担心存储或带宽,那么文件大小可能足够了。

保持文件原样的缺点是:元数据将被保留,损坏或不适合网络的图像格式将保持不适合网络。非常高分辨率的图像有时可以压缩到非常小的文件大小;没有线性相关性,所以如果你的消费者(如移动设备)在高像素图像上崩溃,那么你可能会遇到问题。

让文件保持原样:用户可能已经优化了他们的图像,所以你不会让它"更糟"。元数据将被保留(如果这是件好事的话)。

通常我们建议在存储之前修改上传图像,然后使用ImageResizer URL API和Slimmage.js重新压缩所有图像,以确保客户端获得适合其设备的图像。