ImageResizer 自动缩小

ImageResizer auto scale down

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

查看 FileContentLength 并执行 ?maxwidth=1000&maxheight=1000 如果超过某个指定大小?

看看图片的width/height,相应缩小?目前 ImageResizer 无法 "Get" 图像尺寸。

我看过 this post,但显然我们不想在缩略图 (150x150) 图像上执行此操作。

您关心文件大小还是 type/resolution?如果是前者,就做

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

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

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

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

按原样保留文件的升级:用户可能已经优化了他们的图像,因此您不会成功 'worse'。元数据将被保留(如果这是一件好事的话)。

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