【问题标题】:Imagick PHP Extension -- Montage help?Imagick PHP 扩展——蒙太奇帮助?
【发布时间】:2011-02-19 07:13:06
【问题描述】:

我在使用 Imagick PHP 扩展生成图像时遇到了一些问题。一切正常,除了我下面的“蒙太奇”有白色背景,因此我不能将它覆盖在其他东西之上。如何生成具有透明背景的蒙太奇?

       $Montage = $Icons->montageImage(new imagickdraw(), "3x2+0+0", "34x34+3+3", imagick::MONTAGEMODE_UNFRAME, "0x0+0+0");
      $Canvas->compositeImage($Montage, $Montage->getImageCompose(), 5, 5);

谢谢!!

【问题讨论】:

    标签: php transparency imagick montage


    【解决方案1】:

    我知道这是一个老问题,但我找到了另一种使用 Imagick 的 montageImage 函数的方法。创建 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_ATOP 或您想要的常量,如下所示:

    $Canvas->compositeImage($Montage, imagick::COMPOSITE_ATOP, 5, 5);

    刚刚遇到这个问题并决定发布另一个解决方案,以防其他人想要另一种方法来做到这一点而无需手动循环。

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题,发现为 imagick 提供支持的 MagickWand C API)不支持蒙太奇选项。

      我最终像这样手动蒙版:

      // 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++);
      }
      

      【讨论】:

      • 很遗憾,您必须手动执行此操作,但至少您的建议让我免于头痛。我需要以 2x2 布局蒙太奇图像,但只需稍加调整,您的代码 sn-p 就非常适合。
      • 请看下面的答案。它使用 montageImage 并且可以工作。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-04
      • 2016-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多