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

时间:2015-05-12 19:42:38

标签: php imagick pecl

我没有在php中使用exec命令,因此我无法访问以下手册中的以下内容:http://www.imagemagick.org/Usage/layers/所在的位置,"您可以进一步使用制作一整套图像,并按行或列构建它们。"

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

在想象中使用http://php.net/manual/en/imagick.appendimages.php appendImages函数如何模拟看似更强大的追加CLI命令以按行和列追加图像?或者只是在imagick中使用appendImages函数是不可能的?

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

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

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

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

1 个答案:

答案 0 :(得分:3)

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

  1. 使用appendImages()指定stack=false
  2. ,对从左到右水平追加每行内容的行进行迭代
  3. 使用appendImages()指定stack=true
  4. 从上到下垂直追加所有生成的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.