我正在处理 PDF 图像。 我有一张空白的“夹具”图像,我会将其放入打印机中,并尝试一次将作业图像添加到其中。每个图像位于不同的位置,以免重叠。 我遇到的问题是,由于某种原因,第一个作业添加得很好,但是当我添加第二个作业时,第一个作业被部分删除。我尝试过多种复合算法,但如果它们有效,它们都有相同的问题。想知道是否有人可以指出我的逻辑缺陷。我附上了该过程各个阶段的一些示例。 任何帮助表示赞赏。谢谢。
/**
*
* @param type $jig
* @param type $point
* @param string $original
* @param string $additional
*/
public function addImageToImage($jig, $point, string $original, string $additional, string $jobBase)
{
$preview = new Imagick();
$preview->setResolution(300, 300);
$preview->readImage($original);
$jobImage = new Imagick();
$jobImage->setResolution(300, 300);
$jobImage->readImage($additional);
$x = $this->mmToPx($jig["points"][$point][JigPoints::XCO] + $jig['products'][$jobBase][JigProducts::X_OFF]);
$y = $this->mmToPx($jig["points"][$point][JigPoints::YCO] + $jig['products'][$jobBase][JigProducts::Y_OFF]);
$preview->setImageBackgroundColor($jobImage->getImageBackgroundColor());
$preview->setImageAlphaChannel($jobImage->getImageAlphaChannel());
$preview->setImageType($jobImage->getImageType());
$preview->compositeImage($jobImage,Imagick::COMPOSITE_DISSOLVE,$x,$y,$jobImage->getImageAlphaChannel());
$preview->flattenImages();
$preview->writeImage($original);
$jobImage->destroy();
$preview->destroy();
}
我找到了解决问题的方法。
显然,如果您在 imagick 中创建新图像,然后加载图像,则其行为与从现有图像创建新图像有很大不同。 我不确定为什么第一张图像的一部分总是在我的旧方法中被删除,但以下代码不会发生这种情况。
/**
*
* @param type $jig
* @param type $point
* @param string $original
* @param string $additional
*/
public function addImageToImage($jig, $point, string $original, string $additional, string $jobBase)
{
$preview = new Imagick($original);
$jobImage = new Imagick($additional);
$x = $jig["points"][$point][JigPoints::XCO] + $jig['products'][$jobBase][JigProducts::X_OFF];
$y = $jig["points"][$point][JigPoints::YCO] + $jig['products'][$jobBase][JigProducts::Y_OFF];
$preview->compositeImage($jobImage,Imagick::COMPOSITE_OVER,$x,$y);
$preview->writeImage($original);
$jobImage->clear();
$preview->clear();
}