Perl & Image :: Magick, получение значений цвета по пикселям - PullRequest
2 голосов
/ 10 сентября 2010

Я использую 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»?

Ответы [ 2 ]

1 голос
/ 10 сентября 2010

Читать все о цветах в ImageMagick , включая его квантовую глубину:

ImageMagick может быть скомпилирован для поддержки 32- или 64-битных пикселей типа PixelPacket.Это контролируется значением определения QuantumDepth.Значение по умолчанию - 64-битные пиксели, что обеспечивает наилучшую точность.

Вы также можете прочитать о том, как это происходит уменьшение цвета .

0 голосов
/ 10 сентября 2010

Сжатие JPEG с потерями, поэтому нет прямой связи между значениями пикселей перед сохранением и пикселями в сжатом изображении. Вам нужно будет загрузить новое изображение, если вы хотите узнать, как сжатие изменило его.

...