2015-11-04 94 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