以编程方式调整图像大小以获得与浏览器相同的结果

Resize image programatically to get the same result as a browser

在我的网络应用程序中,我需要调整图片的大小以避免在我只显示头像或预览时加载非常大的文件。

我正在使用 imagemagick 来调整大小,但结果总是模糊不清。我尝试了很多命令选项(scale/resize/thumbnail、添加滤镜、更改颜色空间、更改 quality/density/sharpness、...)但我从来没有得到好的结果。

但是当我尝试在浏览器中显示大文件并让浏览器调整大小时,图片显示正确,没有任何模糊。

这是我做的一个小测试:

我下载了这张图片 https://www.normandie-tourisme.fr/wp-content/uploads/2020/01/8118-Mont-Saint-Michel-couleur-dautomne-%C2%A9-DaLiu-Shutterstock.com-%C2%A9-DaLiu-Shutterstock.com_.jpg,将其重命名为 st_michel.jpg 并使用 convert st_michel.jpg -resize 200x resize_st_michel.jpg

创建了一个调整大小的版本

之后,我创建了一个 html 文件来显示两者:

<!DOCTYPE html>
<html>
<body>
  <div style="display: flex">
    <img src="st_michel.jpg" width=200>
    <img src="resize_st_michel.jpg" width=200>
  </div>
</body>
</html>

结果如下:

正如我们所见,正确的版本(由 imagemagick 调整大小的版本)比浏览器调整大小的版本更模糊(我的网络应用程序用户上传的任何图片的结果都相同)。

所以我的问题是:我可以得到一张与浏览器使用 imagemagick 调整大小后质量相同的图片吗?

保存成png格式比较好,不知道是不是jpg格式压缩的缘故。浏览器只是在调整图像大小,但 Imagemagick 正在调整图像大小并保存,因此引入了一些压缩?

我还加了一点锐化:

magick "E:\Pictures18-Mont-Saint-Michel-couleur-dautomne-©-DaLiu-Shutterstock.com-©-DaLiu-Shutterstock.com_.jpg" -resize 200x -unsharp 1.5x1+0.7+0.02  "E:\Pictures\resize_st_michel.png"

我总是在我的网站上使用调整大小的 png 图片。

缩小总是会模糊一些东西,所以你可以通过锐化来恢复一些,但文本不太喜欢它。

中间的解决方案是缩小到 400 像素,这已经产生了一个小得多的文件,并将最终缩放留给浏览器:

(从左到右:全尺寸 (280K)、400px (32K)、200px+锐化 (16K))。

这还可以让您在高清显示器上显示更大的内容,而 200px 可能有点小。

编辑:试图更深入地挖掘问题我试图再次抓取你的照片,但你的网站似乎已关闭,所以我尝试使用我的照片,令人惊讶的是,模糊并没有发生,我什至会说缩小前的图像比 Firefox 从全尺寸图像生成的图像更好(请参见机翼边缘和 wing/fuselage 交界处的伪影):

在所有行中,左边是原始图像(1200x800)调整为200px,右边是通过以下方式获得的图像:

convert $image.jpg -filter $f -resize 200x -quality 80 $image-200-$f-Q80.jpg

没有过滤器 (Plain) 通常与 Lanczos 相同。预期二次和三次模糊。

顺便说一句,不要缩小太多的另一个原因是,如果有人放大页面,图像会从较大尺寸重新缩放(因此仍然缩小),而如果您以精确尺寸传输图像以实现 100% 显示, 放大会放大并变得模糊。

Edit2:最终检索到图像。在应用适度锐化的情况下,在 200px 的 IM 比例和 FF 比例之间没有太大区别(-sharpen 0x1.0):

但是,如果您仔细观察(放大此处的屏幕截图,因此 FF 不会重新缩放),Firefox 重新缩放会产生一些奇怪的伪像:

Edit3: 我冒昧地访问了您的网站,缩略图模糊可能与 IM 无关。您的缩略图似乎被调整为稍大一些:

  • 左上角是页面中显示的缩略图的屏幕截图,似乎比预期的要大 (224x153)
  • 右上角和底部是 Firefox 中显示的实际图像,原始大小 (220x150)。

这种有害的分钟重新缩放总是会造成很多模糊。