The solution published by "olav at redwall dot ee " was adding a black surround outside each non-transparent shape.
Here is my improved version :
<?php
public function colorize($color, $alpha = 1)
{
$geometry = $this->getImageGeometry();
$width = $geometry['width'];
$height = $geometry['height'];
$draw = new ImagickDraw;
$draw->setFillColor($color);
$draw->rectangle(0, 0, $width, $height);
$temporary = new Imagick;
$temporary->setBackgroundColor(new ImagickPixel('transparent'));
$temporary->newImage($width, $height, new ImagickPixel('transparent'));
$temporary->setImageFormat('png32');
$temporary->drawImage($draw);
$temporary->compositeImage($this, Imagick::COMPOSITE_COPYOPACITY, 0, 0);
$this->setImageArtifact('compose:args', ($alpha * 100) . '%,100%');
$this->compositeImage($temporary, Imagick::COMPOSITE_DISSOLVE, 0, 0);
}
?>