PHP(ImageMagick)-合并源数据中的图像

PHP(ImageMagick)-合并源数据中的图像,php,imagemagick,Php,Imagemagick,我有一个有效图像源数组,我想在PHP中使用ImageMagick水平合并它们 代码: $imagePartsData=[“”,“”,…]; $initImage=函数($source):Imagick { $im=新的Imagick(); $im->setFormat('png'); $im->readImageBlob($source); 返回$im; }; $firstPart=$initImage($imagePartsData[0]); //其他部分 对于($i=1,$c=count($

我有一个有效图像源数组,我想在PHP中使用ImageMagick水平合并它们

代码:

$imagePartsData=[“”,“”,…];
$initImage=函数($source):Imagick
{
$im=新的Imagick();
$im->setFormat('png');
$im->readImageBlob($source);
返回$im;
};
$firstPart=$initImage($imagePartsData[0]);
//其他部分
对于($i=1,$c=count($imagePartsData);$i<$c;$i++)
{
$part=$initImage($imagePartsData[$i]);
$firstPart->addImage($part);
}
$firstPart->resetIterator();
$combined=$firstPart->appendImages(false);
$combined->setImageFormat(“png”);
标题('Content-Type:image/png');
加在一起;
结果是

预期结果:4.png图像合并为1个呈现人物。

我的解决方案:

$imagePartsData
是一个从左到右排序的图像源数组,以便在for循环中正确添加图像

function saveImage(Imagick $imagick)
{
    $imagick->setImageFormat("png");
    $imagick->writeImageFile(fopen('result.png', 'wb'));
    die('saved');
}

function initImage(string $source): Imagick
{
    $im = new Imagick();
    $im->setFormat('png');
    $im->readImageBlob($source);

    return $im;
}

$firstPart = initImage($imagePartsData[0]);

$partWidth = $firstPart->getImageWidth();
$partHeight = $firstPart->getImageHeight();

// foreach other parts
for($i = 1, $c = count($imagePartsData); $i < $c; $i++)
{
    $part = initImage($imagePartsData[$i]);
    $firstPart->addImage($part);
}

$montage = $firstPart->montageImage(new ImagickDraw(), $c.'x1', $partWidth.'x'.$partHeight, 0, '0');

saveImage($montage);
函数saveImage(Imagick$Imagick)
{
$imagick->setImageFormat(“png”);
$imagick->writeImage文件(fopen('result.png','wb');
死亡(“得救”);
}
函数initImage(字符串$source):Imagick
{
$im=新的Imagick();
$im->setFormat('png');
$im->readImageBlob($source);
返回$im;
}
$firstPart=initImage($imagePartsData[0]);
$partWidth=$firstPart->getImageWidth();
$partHeight=$firstPart->getImageHeight();
//其他部分
对于($i=1,$c=count($imagePartsData);$i<$c;$i++)
{
$part=initImage($imagePartsData[$i]);
$firstPart->addImage($part);
}
$montage=$firstPart->montageImage(新的ImagickDraw(),$c.'x1',$partWidth.x'.$partHeight,0,'0');
保存图像(蒙太奇);
结果是意料之中的! 从4张大小相等的图片中合并的人物图片(result.png)。

我的解决方案:

$imagePartsData
是一个从左到右排序的图像源数组,以便在for循环中正确添加图像

function saveImage(Imagick $imagick)
{
    $imagick->setImageFormat("png");
    $imagick->writeImageFile(fopen('result.png', 'wb'));
    die('saved');
}

function initImage(string $source): Imagick
{
    $im = new Imagick();
    $im->setFormat('png');
    $im->readImageBlob($source);

    return $im;
}

$firstPart = initImage($imagePartsData[0]);

$partWidth = $firstPart->getImageWidth();
$partHeight = $firstPart->getImageHeight();

// foreach other parts
for($i = 1, $c = count($imagePartsData); $i < $c; $i++)
{
    $part = initImage($imagePartsData[$i]);
    $firstPart->addImage($part);
}

$montage = $firstPart->montageImage(new ImagickDraw(), $c.'x1', $partWidth.'x'.$partHeight, 0, '0');

saveImage($montage);
函数saveImage(Imagick$Imagick)
{
$imagick->setImageFormat(“png”);
$imagick->writeImage文件(fopen('result.png','wb');
死亡(“得救”);
}
函数initImage(字符串$source):Imagick
{
$im=新的Imagick();
$im->setFormat('png');
$im->readImageBlob($source);
返回$im;
}
$firstPart=initImage($imagePartsData[0]);
$partWidth=$firstPart->getImageWidth();
$partHeight=$firstPart->getImageHeight();
//其他部分
对于($i=1,$c=count($imagePartsData);$i<$c;$i++)
{
$part=initImage($imagePartsData[$i]);
$firstPart->addImage($part);
}
$montage=$firstPart->montageImage(新的ImagickDraw(),$c.'x1',$partWidth.x'.$partHeight,0,'0');
保存图像(蒙太奇);
结果是意料之中的!
从4张大小相同的图片中合并的人的图片(result.png)。

对于,是文件名吗?仅用于确认。对于,是文件名吗?仅用于确认。