Imagick:如何使用 appendImages 附加图像网格

Imagick: How to append a grid of images with appendImages

我没有在 php 中使用 exec 命令,所以我无法访问 运行 手册中的类似以下内容:http://www.imagemagick.org/Usage/layers/ 其中指出,"You can take this further to make a whole array of images, and build them either by rows, or by columns."

convert \( font_1.gif font_2.gif font_3.gif +append \) \
          \( font_4.gif font_5.gif font_6.gif +append \) \
          \( font_7.gif font_8.gif font_9.gif +append \) \
          \( -size 32x32 xc:none  font_0.gif +append \) \
          -background none -append   append_array.gif

如何使用 imagick 中的 http://php.net/manual/en/imagick.appendimages.php appendImages 函数来模拟看似更强大的 append CLI 命令以按行和列附加图像?还是仅仅使用 imagick 中的 appendImages 函数是不可能的?

我希望能够像下面这样在 php 中创建一个数组,遍历它,并在每个新行上,以某种方式使用 imagick 告诉 appendImages,它应该在组合之前开始一个新行图片。

$rack = [
            'row1' => [
                'image1.jpg',
                'image2.jpg'
            ],
            'row2' => [
                'image3.jpg',
                'image4.jpg'
            ]
        ];

我的问题是,如何在 imagick 中使用 appendImages 或 imagick 中的其他函数来实现与 CLI convert -append 命令类似的结果?

我知道我可以使用其他函数,如 compositeImage 并使用 x,y 来控制定位,但简单地追加行对于我的用例来说会简单得多。

您可以仅使用 appendImages() 执行两阶段过程(类似于该命令似乎执行的操作):

  1. 遍历行,从左到右水平附加每行的内容,appendImages() 指定 stack=false
  2. 使用 appendImages() 指定 stack=true
  3. 从上到下垂直附加所有生成的 Imagick 行对象

像这样:

$rack = [
        'row1' => [
            'image1.jpg',
            'image2.jpg'
        ],
        'row2' => [
            'image3.jpg',
            'image4.jpg'
        ]
    ];

$fullimage = new Imagick();

foreach ($rack as $k => $v) {
    $rowimg = new Imagick();
    foreach ($v as $imagelocation) {
       $rowimg->readImage($imagelocation);
    }
    $rowimg->resetIterator();
    $combinedrow = $rowimg->appendImages(false);
    $fullimage->addImage($combinedrow);
}

$fullimage->resetIterator();
$finalimage = $fullimage->appendImages(true); // <-- Done.