跳转到内容

亮度、饱和度与色相调整

复制本页

这三个操作都改变像素外观,但语义并不相同:亮度改变明暗,饱和度改变色彩强度,色相改变色轮上的角度位置。下面每节讨论一个变体,结果图和代码均来自同一组实际执行的测试。

用于色彩调整的苏州东方之门夜景原图
输入:JPEG1938 × 1292,嵌入 sRGB ICC

参考输出由 govips v2.19.0 / libvips 8.17.3 生成。pyvips 与 CLI 没有直接的单函数饱和度/色相调制入口,对应状态标记为 not-supported。

govips.Modulate(1.25, 1, 0) 在 LCh 色彩空间中提高亮度;sharp 使用 HSL 语义。pyvips 与 CLI 示例使用 RGB 线性乘法,属于近似调整而非像素等价实现。

用于色彩调整的苏州东方之门夜景原图
原图 · JPEG
亮度提高后的苏州东方之门夜景
亮度调整 · WEBP1938 × 1292,490,880 字节,3 通道

由 govips v2.19.0 / libvips 8.17.3 实际生成。

image, err := vips.NewImageFromFile("input.jpg")
if err != nil { return err }
defer image.Close()
if err := image.Modulate(1.25, 1, 0); err != nil { return err }
data, _, err := image.ExportWebp(vips.NewWebpExportParams())
if err != nil { return err }
return os.WriteFile("brightness.webp", data, 0o644)

govips 和 sharp 提供直接的 Modulate / modulate 入口。pyvips 与 CLI 没有内置的单步调制封装,因此在下方标注为无直接等价高层入口,不用原图复制冒充饱和度变换。

用于色彩调整的苏州东方之门夜景原图
原图 · JPEG
饱和度降低后的苏州东方之门夜景
饱和度调整 · WEBP1938 × 1292,374,512 字节,3 通道

由 govips v2.19.0 / libvips 8.17.3 实际生成。

if err := image.Modulate(1, 0.35, 0); err != nil { return err }

色相是角度偏移,60 表示旋转 60 度。govips 的 Modulate 在 LCh 色彩空间中处理,而 sharp 在内部使用 LCh/HSL 调制语义,相同参数数值不保证产生相同像素。

用于色彩调整的苏州东方之门夜景原图
原图 · JPEG
色相旋转后的苏州东方之门夜景
色相调整 · WEBP1938 × 1292,393,624 字节,3 通道

由 govips v2.19.0 / libvips 8.17.3 实际生成。

if err := image.Modulate(1, 1, 60); err != nil { return err }