以下是一個關於如何將兩個影像合成到一個影像中的範例。Imagick 類別利用了 PHP5 中引入的例外處理模型,因此我們也會這麼做。讓我們假設,在我們的檔案系統中有一個目錄,其中包含我們的程式和我們要操作的兩個影像。
<?php
try
{
// 讓我們檢查是否可以執行魔術。
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_*` 常數。