将15位色彩空间PNG图像转换为文本文件

时间:2017-07-14 04:38:16

标签: imagemagick imagemagick-convert

我不确定imagemagick能否做到这一点,或者我是否需要自己写点东西;但我想将下面的图像转换为文本文件,使每行代表一个像素(从左到右,从上到下阅读),每行有15位数据(R为5位) ,G和B)。

因此,例如下面的图像将具有256x224 = 57,344行的15位。

imagemagick能够做到这一点吗?如果不存在另一种资源?感谢任何帮助。

enter image description here

2 个答案:

答案 0 :(得分:3)

只需使用“.txt”输出格式:

magick U4zI6.png U4zI6.txt

这将为每一行提供更多的信息,但你可以 使用文本编辑器(如“sed”)来提取RGB值。

$ head -6 U4Zi6.txt
# ImageMagick pixel enumeration: 256,224,65535,srgb
0,0: (28784,45232,53456)  #70B0D0  srgb(112,176,208)
1,0: (28784,45232,53456)  #70B0D0  srgb(112,176,208)
2,0: (28784,45232,53456)  #70B0D0  srgb(112,176,208)
3,0: (28784,45232,53456)  #70B0D0  srgb(112,176,208)
4,0: (28784,45232,53456)  #70B0D0  srgb(112,176,208)

答案 1 :(得分:1)

这应该做你想要的:

convert U4zI6.png -depth 8 rgb: | perl -e '
      # Read file, 3 RGB bytes at a time
      {
         local $/ = \3;
         while(my $pixel=<STDIN>){
            my ($r,$g,$b) = unpack("CCC",$pixel);
            printf("In R/G/B: %d/%d/%d\n",$r,$g,$b);
            my $r = ($r >> 3) & 63;
            my $g = ($g >> 3) & 63;
            my $b = ($b >> 3) & 63;
            printf("Out R/G/B: %d/%d/%d\n",$r,$g,$b);
         }
      }
   '