Perl & Image :: Magick ، ​​الحصول على قيم الألوان بواسطة Pixel

StackOverflow https://stackoverflow.com/questions/3681415

سؤال

أنا أستخدم Perl و The Image :: Magick Module لمعالجة بعض JPEGs.

أنا أستخدم GetPixels Sub للحصول على مكونات 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
        ];

قبل المكالمة لتغيير الحجم: (في هذا المثال) يكون لون البكسل المعين هو #B4B0AF ، والقيم التي تم إرجاعها هي 0xB4B4 ، 0xB0B0 ، 0xAFAF. لا أفهم لماذا هذا ، لكن يمكنني التعامل معه باستخدام Mod 256 ؛

ولكن بعد المكالمة للتغيير حجمها ، لا تتوافق القيم التي تم إرجاعها بأي طريقة واضحة للقيم الفعلية التي أجدها في ملف الإخراج (تحقق. jpg).

هل الصورة :: ماجيك مجرد ما هو فائق (يمثل السراويل القصيرة بدلاً من البايتات)؟
وهل تمثل ضغط JPEG التناقض بين إخراج Dumper الثاني ومحتويات "التحقق. jpg"؟

هل كانت مفيدة؟

المحلول

اقرا كل شي عنه الألوان في ImageMagick, ، بما في ذلك عمقها الكمي:

قد يتم تجميع ImageMagick لدعم 32 أو 64 بت بكسل من النوع PixelPacket. يتم التحكم في هذا من خلال قيمة تعريف الكمية. الافتراضي هو 64 بت بكسل ، والذي يوفر أفضل دقة.

قد ترغب أيضًا في قراءة كيفية عملها الحد من اللون.

نصائح أخرى

ضغط JPEG هو فقدان ، لذلك لا توجد مراسلات مباشرة بين قيم البكسل قبل حفظها والبكسل في الصورة المضغوطة. يجب عليك تحميل الصورة الجديدة إذا كنت تريد معرفة كيفية تعديل الضغط عليها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top