我有一个4x1像素的png图片,最左边的像素是白色(#ffffff),第二个像素是红色(#ff0000),第三个像素是绿色(#00ff00),最右边的像素是蓝色(#0000ff),在这里几乎看不见:。
使用下面的perl脚本,我尝试读取每个像素的rgb值:
令我十分惊讶的是,它打印了。
为什么脚本报告错误的rgb值,我应该如何让它报告正确的值?
编辑:根据mpapec的问题,base64 white-red-green-blue.png的输出为:
而且,可能并不令人惊讶的是,它打印了预期的结果。
使用下面的perl脚本,我尝试读取每个像素的rgb值:
use warnings;
use strict;
use GD;
my $image = new GD::Image('white-red-green-blue.png') or die;
for (my $x=0; $x<4; $x++) {
my $index = $image->getPixel($x, 0);
my ($r,$g,$b) = $image->rgb($index);
printf "%3d %3d %3d\n", $r, $g, $b;
}
令我十分惊讶的是,它打印了。
252 254 252
252 2 4
4 254 4
4 2 252
然而我预期的情况是
255 255 255
255 0 0
0 255 0
0 0 255
为什么脚本报告错误的rgb值,我应该如何让它报告正确的值?
编辑:根据mpapec的问题,base64 white-red-green-blue.png的输出为:
iVBORw0KGgoAAAANSUhEUgAAAAQAAAABCAIAAAB2XpiaAAAAAXNSR0IArs4c6QAAAARnQU1B
AACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAASSURBVBhXY/gPBAwMDEDM8B8AL90F
+8V5iZQAAAAASUVORK5CYII=
编辑 II 根据 dgw 的建议,我也尝试了my $image = newFromPng GD::Image('white-red-green-blue.png') or die;
但结果相同。
更新:我已经尝试使用GD
代替Image::Magick
进行相同的操作:
use warnings;
use strict;
use Image::Magick;
my $image = Image::Magick->new or die;
my $read = $image -> Read('white-red-green-blue.png');
for (my $x=0; $x<4; $x++) {
my @pixels = $image->GetPixels(
width => 1,
height => 1,
x => $x,
y => 0,
map =>'RGB',
#normalize => 1
);
printf "%3d %3d %3d\n", $pixels[0] / 256, $pixels[1] / 256, $pixels[2] / 256;
}
而且,可能并不令人惊讶的是,它打印了预期的结果。
255 255 255
255 0 0
0 255 0
0 0 255
newFromPng
而不是new
吗? - dgw