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 がチャネルごとに 2 バイトを返すことがわかりました。
$VAR1 = [
46260,
45232,
44975
];
$VAR1 = [
58271,
58949,
60330
];
Resize の呼び出し前: (この例では) 指定されたピクセルの色は #b4b0af であり、返される値は 0xB4B4、0xB0B0、0xAFAF です。これがなぜなのかわかりませんが、MOD 256 を使用して対処できます。
しかし、Resize を呼び出した後、返された値は、出力ファイル (verify.jpg) で見つけた実際の値と明確に対応していません。
Image::Magick は超精密なだけですか (バイトではなくショートを考慮)?
また、JPEG 圧縮は、2 番目の Dumper 出力と「verify.jpg」の内容との不一致を説明していますか?