我使用Perl和Image :: Magick模块来处理一些JPEG。Perl&Image :: Magick,按像素获取颜色值
我使用GetPixels子来获取每个像素的RGB分量。
例如
my @pixels = $img->GetPixels(
width => 1,
height => 1,
x => 0,
y => 0,
map => 'RGB',
#normalize => 1
)
print Dumper \@pixels;
$img->Resize(
width => 1,
height => 1,
filter => 'Lanczos'
);
@pixels = $img->GetPixels(
width => 1,
height => 1,
x => 0,
y => 0,
map => 'RGB',
#normalize => 1
);
print Dumper \@pixels;
$img->Write('verify.jpg');
我发现getPixels每个通道返回两个字节,例如,
$VAR1 = [
46260,
45232,
44975
];
$VAR1 = [
58271,
58949,
60330
];
该呼叫之前调整大小:(在该例子中)的指定像素的颜色为#b4b0af,返回值是0xB4B4,0xB0B0,0xAFAF。我不明白这是为什么,但我可以使用MOD 256处理它;
但调用Resize之后,返回的值与我在输出文件(verify.jpg)中找到的实际值没有任何明显的对应关系。
Image :: Magick只是超精确的(占短裤而不是字节)?
对于第二个Dumper输出和'verify.jpg'内容之间的差异,JPEG压缩账号是否存在?
谢谢布莱恩。非常有趣的链接。我想我会用更高的精度,但出于兴趣,我可以假设右移8位以上的值会给我一个准确的三字节表示的颜色? – aidan 2010-09-10 16:07:48