Imagick PHP Extension - Montage Help؟
-
26-09-2019 - |
سؤال
لقد واجهت بعض المتاعب في توليد صورة مع امتداد PHP Imagick. كل شيء يعمل بشكل جيد ، باستثناء ما يلي "المونتاج" له خلفية بيضاء ، وبالتالي لا يمكنني تراكبها فوق شيء آخر. كيف يمكنني إنشاء مونتاج بخلفية شفافة؟
$Montage = $Icons->montageImage(new imagickdraw(), "3x2+0+0", "34x34+3+3", imagick::MONTAGEMODE_UNFRAME, "0x0+0+0");
$Canvas->compositeImage($Montage, $Montage->getImageCompose(), 5, 5);
شكرًا!!
المحلول
واجهت نفس المشكلة واكتشفت أن واجهة برمجة تطبيقات Magickwand C ، التي تشير إلى Imagick) ، لا تدعم خيار المونتاج.
انتهى بي الأمر إلى Montaging يدويًا مثل هذا:
// Add them to an array of Imagick objects, instead of using addImage().
$images = new Array();
// Make a transparent canvas.
$target = new Imagick();
$target->newImage($width, $height * count(images), 'none');
$i = 0;
foreach ($images as $image) {
$target->compositeImage($image, imagick::COMPOSITE_COPY, 0, $height * $i++);
}
نصائح أخرى
أعلم أن هذا سؤال قديم ، لكنني وجدت طريقة أخرى للقيام بذلك باستخدام وظيفة MontageImage الخاصة بـ Imagick. بعد إنشاء كائن Imagick الخاص بك ، يجب أن تعلن الخلفية على أنها شفافة مثل هذا:
$Icons->setBackgroundColor( new ImagickPixel('transparent') );
بمجرد تعيين ذلك ، يمكنك تشغيل الكائن من خلال montageImage الذي سيخلق montageimage مع خلفية شفافة:
$Montage = $Icons->montageImage(new imagickdraw(), "3x2+0+0", "34x34+3+3", imagick::MONTAGEMODE_UNFRAME, "0x0+0+0");
بعد ذلك ، يمكنك إضافة صورة المونتاج الجديدة إلى صورتك المركبة مع التأكد من استخدام Imagick Composite Composite_atop أو الثابتة المطلوبة مثل هذا:
$Canvas->compositeImage($Montage, imagick::COMPOSITE_ATOP, 5, 5);
ركض للتو عبر هذا السؤال وقررت نشر حل آخر في حالة يريد شخص آخر طريقة أخرى للقيام بذلك دون حلقة يدوية.