كيف يمكنني معالجة ملفات JPG باستخدام ImageMagick (Imagick API)؟ أحصل على استثناء ، nodeCodeDeDeleGateForthImageFormat ، عندما أحاول أن أحاول
سؤال
أنا أستخدم ImageMagick مع PHP Imagick API لمعالجة ملفات JPG التي تم تحميلها - ومع ذلك ، عندما أحاول قراءة نقطة أو حتى قراءة ملف فعلي ، أحصل على ملف NoDecodeDelegateForThisImageFormat
استثناء.
مثال على الرمز الذي أستخدمه أدناه:
private function resizeImageBlob($blob, $width, $height) {
$image = new Imagick();
$image->readImageBlob($blob);
$image->resizeImage($width, $height, IMAGICK::FILTER_LANCZOS, 1);
$resizedBlob = $image->getImageBlob();
return $resizedBlob;
}
الصورة التي يمثلها النقطة هي صورة JPG ، لكن ImageMagick ترمي الاستثناء عندما تحاول قراءة السطر:
$image->readImageBlob($blob);
هل يعرف أي شخص لماذا قد يحدث هذا؟
المحلول
لقد اكتشفت إجابة مشكلتي. السبب في حدوث الاستثناء كان بالفعل بسبب حقيقة أن المكتبة لم يكن لديها دعم JPEG مدمج ، ولكن السبب في حدوث ذلك هو أن إصدار Extension PHP Imagick ونسخة مكتبة ImageMagick كانت مختلفة.
هناك طريقة جيدة للتأكد من عدم مواجهة هذه المشكلة وهي تنزيل كل من مكتبة ImageMagick وملحق PHP Imagick ، وننظر على وجه التحديد إلى الإصدارات لترى أنها تتطابق.
بدلاً من ذلك ، يمكنك التحقق من إصدار امتداد PHP الخاص بك في مجلد PHP/EXT عن طريق تمكينه في ملف php.ini الخاص بك ، واستخدام
echo phpinfo();
للتحقق من إصدار الامتداد. بعد ذلك ، يمكنك تنزيل نفس الإصدار من مكتبة ImageMagick.