这是一个关于如何将两个图像合成到一个图像中的示例。Imagick 类利用了 PHP5 中引入的异常处理模型,因此我们也将这样做。让我们假设,我们的文件系统中有一个目录,其中包含我们的程序以及我们想要操作的两个图像。
<?php
try
{
// 让我们检查我们是否可以执行 magick。
if (TRUE !== extension_loaded('imagick'))
{
throw new Exception('Imagick 扩展未加载。');
}
// 此检查是前一个检查的替代方法。
// 使用最适合您的那个。
if (TRUE !== class_exists('Imagick'))
{
throw new Exception('Imagick 类不存在。');
}
// 让我们找出我们在哪里。
$dir = dirname(__FILE__);
// 让我们读取图像。
$glasses = new Imagick();
if (FALSE === $glasses->readImage($dir . '/glasses.png'))
{
throw new Exception();
}
$face = new Imagick();
if (FALSE === $face->readImage($dir . '/face.jpg'))
{
throw new Exception();
}
// 让我们戴上眼镜(距离脸部左侧 10 像素,顶部 20 像素)。
$face->compositeImage($glasses, Imagick::COMPOSITE_DEFAULT, 10, 20);
// 让我们合并所有图层(这不是强制性的)。
$face->flattenImages();
// 我们不想覆盖 face.jpg。
$face->setImageFileName($dir . '/face_and_glasses.jpg');
// 让我们写入图像。
if (FALSE == $face->writeImage())
{
throw new Exception();
}
}
catch (Exception $e)
{
echo '捕获异常:' . $e->getMessage() . "\n";
}
exit(0);
?>
关于 Imagick::COMPOSITE_DEFAULT 参数再补充几句话。我们正在组合在一起的图像是单独的图层。我们不仅可以按特定顺序放置它们,还可以选择我们希望它们相互干扰的方式。这就是 compositeImage 方法的第二个参数的用武之地。它可以作为常量或该常量的整数值给出。您可以使用 PHP5 的反射 API 获取它们的列表。
<?php
Reflection::export(new ReflectionClass('Imagick'));
?>
只需在“常量”部分查找 COMPOSITE_* 常量。