用ImageMagick将复合的多个图像合并到一个图像中
问题描述:
我真的很习惯使用imagemagick,所以我可能会让事情完全错误。用ImageMagick将复合的多个图像合并到一个图像中
我想在10张图像加载,以及复合在一起到电网,5张图片的两行是这样的:
所有的图像具有相同的尺寸所以没有问题,但我甚至努力加载多个图像。
我曾尝试以下:
$src1 = new \Imagick('../'.$fileSelection[0][3]);
$src1->writeImage("./output.png");
$src2 = new \Imagick('../'.$fileSelection[1][3]);
$src2->writeImage("./output2.png");
header('Content-Type: image/jpeg');
echo $src1;
echo $src2;
这似乎只输出页面,并没有其他的第一张图像。
我哪里错了?我如何加载所有十个图像,以及如何将它们组合在一起?
我发现下面的代码:
$src1 = new \Imagick("./src1.png");
$src2 = new \Imagick("./src2.png");
$src1->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_TRANSPARENT);
$src1->setImageArtifact('compose:args', "1,0,-0.5,0.5");
$src1->compositeImage($src2, Imagick::COMPOSITE_MATHEMATICS, 0, 0);
$src1->writeImage("./output.png");
但我上了页/空白什么都没有。
任何意见赞赏。
答
使用Imagick::appendImages
通过迭代每列&行来构建网格。
<?php
define('WIDTH', 300);
define('HEIGHT', 400);
$canvas = new Imagick();
for ($row = 0; $row < 2; $row++) {
$stack = new Imagick();
for ($column = 0; $column < 5; $column++) {
// For fun, let's create some colors
$color = sprintf('hsl(%.02f, 50, 100)', $column*99.99+$row*66.66);
$stack->newImage(WIDTH, HEIGHT, $color);
}
$stack->resetIterator();
$rowImage = $stack->appendImages(FALSE);
$canvas->addImage($rowImage);
}
$canvas->resetIterator();
$result = $canvas->appendImages(TRUE);
$result->writeImage('/tmp/out.png');
Imagick::borderImage
可用于添加间隔符,但如果我们已经在每个迭代的图像,比我们还不如干脆创建间隔之间追加。
<?php
define('WIDTH', 300);
define('HEIGHT', 400);
define('SPACE', 35);
$canvas = new Imagick();
for ($row = 0; $row < 2; $row++) {
$stack = new Imagick();
$stack->newImage(SPACE,1,'white');
for ($column = 0; $column < 5; $column++) {
$color = sprintf('hsl(%.02f, 50, 100)', $column*99.99+$row*66.66);
$stack->newImage(WIDTH, HEIGHT, $color);
$stack->newImage(SPACE, 1, 'white');
}
$stack->resetIterator();
$rowImage = $stack->appendImages(FALSE);
$canvas->newImage(1, SPACE, 'white');
$canvas->addImage($rowImage);
}
$canvas->newImage(1, SPACE, 'white');
$canvas->resetIterator();
$result = $canvas->appendImages(TRUE);
$result->writeImage('/tmp/out.png');
+0
这是惊人的,令人难以置信的帮助。我现在正在使用此代码来尝试输出我的图像。非常感谢。 – user1486133
你需要我)创造你想要的最终输出大小的“画布”的形象。 ii)加载每个图像,并将其合成到画布图像中iii)将该画布图像发送到浏览器。 – Danack