سؤال

لقد واجهت بعض المتاعب في توليد صورة مع امتداد 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);

ركض للتو عبر هذا السؤال وقررت نشر حل آخر في حالة يريد شخص آخر طريقة أخرى للقيام بذلك دون حلقة يدوية.

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