我从一个jpg设置像素。保存另一个jpg文件。再次阅读新文件。获取像素。但它给了我不正确的结果。 那是我的代码:
use Image::Magick;
use Data::Dumper;
my $im = new Image::Magick;
$im->Read('file1.jpg');
my @pixel = $im->GetPixel(x=>0,y=>0,channel=>'RGB', normalize=>'True');
print Dumper(@pixel);
my @color = ('1.0', '0.0', '0.0');
$im->SetPixel(x=>0, y=>0, channel=>'RGB', normalize=>'True', color => \@color);
$im->Write('file30.jpg');
@pixel = $im->GetPixel(x=>0,y=>0,channel=>'RGB', normalize=>'True');
print Dumper(@pixel);
print "-" x 30, "\n";
my $nim = new Image::Magick;
$nim->Read('file30.jpg');
my @npixel = $nim->GetPixel(x=>0,y=>0,channel=>'RGB', normalize=>'True');
print Dumper(@npixel);
我跑的时候:
$VAR1 = '0.133333333333333';
$VAR2 = '0.141176470588235';
$VAR3 = '0.0588235294117647';
$VAR1 = '1';
$VAR2 = '0';
$VAR3 = '0';
------------------------------
$VAR1 = '0.32156862745098';
$VAR2 = '0.247058823529412';
$VAR3 = '0.188235294117647';
为什么@npixel会给我错误的结果?如何解决?
UPD
它适用于.BMP文件。
答案 0 :(得分:4)
发布与上述评论相对应的答案。
最好通过有损压缩与无损压缩的比较来解释:
https://en.wikipedia.org/wiki/Lossy_compression
简而言之,您可以使用带有imagemagick的RGB像素数组,设置像素值,获取它们等等。
保存时,还有其他操作无法控制。在JPEG的情况下,它是一种称为DCT(离散余弦变换)的有损压缩算法:http://en.wikipedia.org/wiki/Discrete_cosine_transform。为了减小文件大小,这种有损压缩(在JPEG的情况下)是必要的。
如果您不想遇到此问题,则需要使用: