Here is an example on how to compose two images into a single one. The Imagick class utilises the exception handling model introduced in PHP5 and thus we will do that as well. Let's presume, that we have a directory in our filesystem, which contains our program and the two images we want to operate on.
<?php
try
{
// Let's check whether we can perform the magick.
if (TRUE !== extension_loaded('imagick'))
{
throw new Exception('Imagick extension is not loaded.');
}
// This check is an alternative to the previous one.
// Use the one that suits you better.
if (TRUE !== class_exists('Imagick'))
{
throw new Exception('Imagick class does not exist.');
}
// Let's find out where we are.
$dir = dirname(__FILE__);
// Let's read the images.
$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();
}
// Let's put the glasses on (10 pixels from left, 20 pixels from top of face).
$face->compositeImage($glasses, Imagick::COMPOSITE_DEFAULT, 10, 20);
// Let's merge all layers (it is not mandatory).
$face->flattenImages();
// We do not want to overwrite face.jpg.
$face->setImageFileName($dir . '/face_and_glasses.jpg');
// Let's write the image.
if (FALSE == $face->writeImage())
{
throw new Exception();
}
}
catch (Exception $e)
{
echo 'Caught exception: ' . $e->getMessage() . "\n";
}
exit(0);
?>
Also a couple more words on the Imagick::COMPOSITE_DEFAULT argument. The images we are composing together are separate layers. Not only can we put them in specific order, but we can also choose the way we want them to interfere with each other. And here comes the second argument of the compositeImage method. It can be given either as a constant or as the integer value of that constant. You can use the reflection API of PHP5 to get the list of them.
<?php
Reflection::export(new ReflectionClass('Imagick'));
?>
Just look for COMPOSITE_* constants in the "Constants" section.
imagick_composite
(PECL imagick:0.9.1-0.9.9)
imagick_composite — Composite the second image onto the first at the specified offsets
Descrição
bool imagick_composite ( resource $image, int $type, resource $image2, int $x_offset, int $y_offset )Atenção
Esta função não está documentada, somente a lista de argumentos está disponível.
Parâmetros
- image
Image handle
- type
One of IMAGICK_COMPOSITE_* constants
- image2
Image 2 handle
- x_offset
Column offset of the composited image
- y_offset
Row offset of the composited image
Valores de retornado
Retorna TRUE em caso de sucesso ou FALSE em falhas.
User Contributed Notes
imagick_composite
imagick_composite
m dot roszka at textend dot net
13-Feb-2008 12:55
13-Feb-2008 12:55

imagick_clonehandle