【问题标题】:imagemagick pixel color extraction (force RGB)imagemagick 像素颜色提取(强制 RGB)
【发布时间】:2020-05-29 00:43:51
【问题描述】:

我正在使用 imagemagick 在 jpeg 图像中提取像素颜色 @ some x,y 坐标。

大多数时候输出是srgb(R,G,B),但在某些情况下它返回grey##

由于我需要纯 RGB 数字进行计算,grey## 不是一个好值。

是否可以始终从 imagemagick 获取 RGB 值?

命令:

magick image.jpg -format "%[pixel:p{110,246}]" info:-

【问题讨论】:

    标签: imagemagick


    【解决方案1】:

    您要做的是在 ImageMagick fx: 计算中分别计算每个颜色通道。

    magick image.jpg[1x1+110+245] -format "%[fx:round(255*u.r)],%[fx:round(255*u.g)],%[fx:round(255*u.b)]" info:
    


    这将产生例如:

    magick lena.jpg[1x1+110+245] -format "%[fx:round(255*u.r)],%[fx:round(255*u.g)],%[fx:round(255*u.b)]" info:
    


    208,90,88

    如果你想包含 rgb(),那么做

    magick image.jpg[1x1+110+245] -format "rgb(%[fx:round(255*u.r)],%[fx:round(255*u.g)],%[fx:round(255*u.b)])" info:
    


    magick lena.jpg[1x1+110+245] -format "rgb(%[fx:round(255*u.r)],%[fx:round(255*u.g)],%[fx:round(255*u.b)])" info:
    


    rgb(208,90,88)

    补充:

    如果您希望返回多个像素,则可以执行以下操作:

    magick lena.jpg -format "rgb(%[fx:round(255*u.p{10,10}.r)],%[fx:round(255*u.p{10,10}.g)],%[fx:round(255*u.p{10,10}.b)]) rgb(%[fx:round(255*u.p{100,100}.r)],%[fx:round(255*u.p{100,100}.g)],%[fx:round(255*u.p{100,100}.b)])\n" info:
    


    rgb(226,130,106) rgb(131,46,85)

    【讨论】:

    • 看起来不错,但如果我想获得 2 个像素怎么办? image.jpg[1x1+110+245] 可以在这个括号中获得 2 个像素吗?例如:%[pixel:p{847,988}] %[pixel:p{400,300}]" info:
    • 如果将两个表达式放在同一组双引号中,则可以这样做,例如:magick lena.jpg -format "%[pixel:u.p{10,10}] %[pixel:u.p{100,100}]\n" info:,结果将是:srgb(226,130,106) srgb(131,46,85)
    • 我做了一些测试,-format "%[pixel:u.p{10,10}] %[pixel:u.p{100,100}]\n" 仍然给我grey##
    • 图像是彩色的,但是如果像素恰好是灰色的,imagemagick 会给我grey## 而不是srgb()
    • 在我的回答中查看我的补充。
    猜你喜欢
    • 1970-01-01
    • 2021-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    • 1970-01-01
    相关资源
    最近更新 更多