2015-11-04 156 views
0

我真的很习惯使用imagemagick,所以我可能会让事情完全错误。用ImageMagick将复合的多个图像合并到一个图像中

我想在10张图像加载,以及复合在一起到电网,5张图片的两行是这样的:

enter image description here

所有的图像具有相同的尺寸所以没有问题,但我甚至努力加载多个图像。

我曾尝试以下:

$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"); 

但我上了页/空白什么都没有。

任何意见赞赏。

+0

你需要我)创造你想要的最终输出大小的“画布”的形象。 ii)加载每个图像,并将其合成到画布图像中iii)将该画布图像发送到浏览器。 – Danack

回答

3

使用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'); 

First Example

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'); 

Second Example

+0

这是惊人的,令人难以置信的帮助。我现在正在使用此代码来尝试输出我的图像。非常感谢。 – user1486133

相关问题