PHP (ImageMagick) - 从源数据合并图像
PHP (ImageMagick) - Merge images from source data
我有一组有效的图像源,我想在 PHP.
中使用 ImageMagick 水平合并它们
代码:
$imagePartsData = ["<VALID JPG DATA 1>", "<VALID JPG DATA 2>", ...];
$initImage = function($source): Imagick
{
$im = new Imagick();
$im->setFormat('png');
$im->readImageBlob($source);
return $im;
};
$firstPart = $initImage($imagePartsData[0]);
// foreach other parts
for($i = 1, $c = count($imagePartsData); $i < $c; $i++)
{
$part = $initImage($imagePartsData[$i]);
$firstPart->addImage($part);
}
$firstPart->resetIterator();
$combined = $firstPart->appendImages(false);
$combined->setImageFormat("png");
header('Content-Type: image/png');
echo $combined;
结果是black background with white square
预期结果: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);
结果如期而至!
人物图片 (result.png) 从 4 张 等 大小的图像合并而来。
我有一组有效的图像源,我想在 PHP.
中使用 ImageMagick 水平合并它们代码:
$imagePartsData = ["<VALID JPG DATA 1>", "<VALID JPG DATA 2>", ...];
$initImage = function($source): Imagick
{
$im = new Imagick();
$im->setFormat('png');
$im->readImageBlob($source);
return $im;
};
$firstPart = $initImage($imagePartsData[0]);
// foreach other parts
for($i = 1, $c = count($imagePartsData); $i < $c; $i++)
{
$part = $initImage($imagePartsData[$i]);
$firstPart->addImage($part);
}
$firstPart->resetIterator();
$combined = $firstPart->appendImages(false);
$combined->setImageFormat("png");
header('Content-Type: image/png');
echo $combined;
结果是black background with white square
预期结果: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);
结果如期而至! 人物图片 (result.png) 从 4 张 等 大小的图像合并而来。