以下是如何将两张图像合成到一张图像中的示例。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_* 常量。