仗剑江湖载酒行

使用PHP Imagick进行拼图

2019.09.25

最近处理一个需求,需要从CDN Down大量的图片进行拼接,再转换成PDF。这类工作PHP不是很擅长,但还好这不是一个长期使用且需要一定并发数的任务,为了操作数据库方便,还是使用PHP来完成这项任务。

在拼接的时候,部分图片拼接后高度的值太大,那么这个操作会失败;想来想去只能将图片拼成三列以减少其高度。在互联网上关于imagick extension并不丰富的资料中,我还是找到了一块代码片段,写出了下面的代码:

use Imagick;

// blob array
$files = [...];

$images = array_chunk($files, 3);
$canvas = new Imagick;

foreach ($images as $image) {
    $row = new Imagick();

    foreach ($image as $binary) {
        $row->readImageBlob($binary);
    }

    $row->resetIterator();
    $combine = $row->appendImages(false);
    $canvas->addImage($combine);
}

$canvas->resetIterator();
$content = $canvas->appendImages(true);
$binary = $content->getImageBlob();
$content->destroy();

file_put_contents('combine.png', $binary);