帮助我理解图像压缩

我不太确定我是否理解 Discourse 中的图像压缩。请给我解释一下。

  • 我上传了一张 2392x884、214kb 的图片,分辨率保持不变。
  • 我上传了一张 3200x1800、1.7mb 的图片,分辨率缩小到 composer media optimization image resize dimensions threshold 设置。

当该设置为 1280 像素宽时,我期望所有图片都被缩小到该宽度。然而,似乎 composer media optimization image bytes optimization threshold 设定了优先。

  • 我的第一张图片小于 524kb,所以没有被更改。
  • 第二张图片大于 524kb,所以更改了。

如果我理解正确,有没有办法将所有上传的文件都缩小到 1280 像素宽?

以下是我的设置以供确认:

max image size kb = 4096

也许将该阈值设置得非常低?

4 个赞

由于主题的命名非常笼统,我没有另开新帖 :kissing_face_with_smiling_eyes: 但“客户端优化”在实践中意味着什么?——设备操作系统会自行决定是否执行某项操作?但这会导致一个巨大的图片在传输到客户端之前,其大小会缩放到合适的比例,或者我现在完全迷失了方向?

测试后,这是正确的 :slight_smile:
我相信 @pfaffman 的解决方案是实现您想要的目标的方法。

长篇解释:Faster (and smaller) uploads in Discourse with Rust, WebAssembly and MozJPEG
简短解释:大型图片在发送到 Discourse 之前会在您的设备上(通过 javascript)调整大小/重新压缩。

3 个赞

好的,它朝那个方向起作用。嗯,这比朝另一个方向优化要聪明得多 :man_facepalming:

谢谢。

我昨晚发帖前试过了,这似乎是关键。

情况是这样的:

composer media optimization image bytes optimization threshold

  • 524288(默认)设置 = 优质图像,1920px。
  • 200000 设置 = 图像质量下降,因为它将分辨率从 1920px 降低到 1280px。

所以今天早上,在我的桌面上,我用同一张图片(2392px),将其调整到 1280px,它也有些降质。所以这种降质是我无法避免的。这是将分辨率从 2392px 降低到 1280px 的结果。不过,它确实将图片大小减小了四倍。

注意: .HEIC 照片不遵循相同的规则。一张 4032px 的 .HEIC 照片被减小到 2016px。所以我不知道该设置是如何应用的。

总而言之,经过一些反复试验,我认为我明白了。我喜欢 1920px 照片比 1280px 照片更清晰,所以我将使用默认设置。

希望这对其他人有所帮助。

编辑: 我将 composer media optimization image bytes optimization threshold 从默认的 524288 降低到 200000。我注意到,上传一张 1220px @ 414kb 的基本 .png 文件后,文件大小仅为 406kb。通过将上述设置降低到 200000,文件大小从 414kb 减小到 201kb。分辨率保持不变。

所以我不知道该设置还会触发什么其他功能,但显然还有其他功能可以进一步减小图片大小。

I find the diagram at the blog post helpful:

X → composer media optimization image bytes optimization threshold
Y → composer media optimization image resize dimensions threshold
Z → composer media optimization image resize width target

6 个赞

我恐怕是我太笨了,在查看设置定义时没有完全理解这部分:

composer_media_optimization_image_dimensions_resize_threshold: default 1920
触发客户端调整大小的最小图像宽度

composer_media_optimization_image_dimensions_resize_target: default 1920
宽度大于 composer_media_optimization_image_dimensions_resize_threshold 的图像将被调整到此宽度。
必须 ≥ 该阈值。

特别是这部分:

必须 ≥ 该阈值。

难道不应该是 ≤ 吗?我不明白为什么它会调整到比阈值更高的宽度值 :thinking:

另外,在同一设置的描述中,第一个设置命名错误:

composer_media_optimization_image_dimensions_resize_threshold
正确的名称是“Composer media optimization image resize dimensions threshold”(“resize dimensions”,而不是“dimensions resize”)。