我不太确定我是否理解 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
Jagster
(Jakke Lehtonen)
2023 年8 月 8 日 07:57
3
由于主题的命名非常笼统,我没有另开新帖 但“客户端优化”在实践中意味着什么?——设备操作系统会自行决定是否执行某项操作?但这会导致一个巨大的图片在传输到客户端之前,其大小会缩放到合适的比例,或者我现在完全迷失了方向?
Canapin
(Coin-coin le Canapin)
2023 年8 月 8 日 08:10
4
测试后,这是正确的
我相信 @pfaffman 的解决方案是实现您想要的目标的方法。
Jakke Lehtonen:
但“客户端优化”在实践中意味着什么?
长篇解释:Faster (and smaller) uploads in Discourse with Rust, WebAssembly and MozJPEG
简短解释:大型图片在发送到 Discourse 之前会在您的设备上(通过 javascript)调整大小/重新压缩。
3 个赞
Jagster
(Jakke Lehtonen)
2023 年8 月 8 日 08:15
5
Coin-coin le Canapin:
在发送到 Discourse 之前
好的,它朝那个方向起作用。嗯,这比朝另一个方向优化要聪明得多
谢谢。
我昨晚发帖前试过了,这似乎是关键。
情况是这样的:
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。分辨率保持不变。
所以我不知道该设置还会触发什么其他功能 ,但显然还有其他功能可以进一步减小图片大小。
Falco
(Falco)
2023 年8 月 8 日 18:17
7
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 个赞
Canapin
(Coin-coin le Canapin)
2025 年11 月 9 日 14:23
8
我恐怕是我太笨了,在查看设置定义时没有完全理解这部分:
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 的图像将被调整到此宽度。
必须 ≥ 该阈值。
特别是这部分:
必须 ≥ 该阈值。
难道不应该是 ≤ 吗?我不明白为什么它会调整到比阈值更高的宽度值
另外,在同一设置的描述中,第一个设置命名错误:
composer_media_optimization_image_dimensions_resize_threshold
正确的名称是“Composer media optimization image resize dimensions threshold”(“resize dimensions”,而不是“dimensions resize”)。