Я использую Perl и модуль Image :: Magick для обработки некоторых JPEG.
Я использую подпрограмму 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
];
Перед вызовом Resize: (в этом примере) цвет назначенного пикселя - # b4b0af, а возвращаемые значения - 0xB4B4, 0xB0B0, 0xAFAF. Я не понимаю, почему это так, но я могу справиться с этим, используя MOD 256;
Но после вызова метода Resize возвращенные значения не соответствуют никаким очевидным фактическим значениям, которые я нахожу в выходном файле (verify.jpg).
Является ли Image :: Magick просто сверхточным (учитывая шорты вместо байтов)?
И учитывает ли сжатие JPEG несоответствие между вторым выводом Dumper и содержимым «verify.jpg»?