Я использую Perl и модуль Image::Magick для обработки некоторых файлов JPEG.
Я использую подпрограмму GetPixels для получения компонентов RGB каждого пикселя.
e.g.
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. Я не понимаю, почему это так, но я могу справиться с этим, используя МОД 256;
Но после вызова Resize возвращаемые значения никаким очевидным образом не соответствуют фактическим значениям, которые я нахожу в выходном файле (verify.jpg).
Является ли Image::Magick просто сверхточным (с учетом шорт, а не байтов)?
И объясняет ли сжатие JPEG несоответствие между выводом второго дампера и содержимым 'verify.jpg'?