我试图用很多小图标覆盖背景图片。 有时,其中一个越过背景图像的边缘,这似乎使Imagick冻结。 (图像生成需要很长时间,最后不会渲染图像。)
这是正常的吗?
我有ImageMagick 6.9.3-7 Q16 x68和PHP 5.5.12。
感谢您的帮助!
以下是显示图标的功能:
它是Imagick的PHP脚本。在这里。
public function render($imagick, &$draw, &$cursor, &$ready2Print){
//var_dump($this);
$metrics = $ready2Print->getCharMetrics();
//var_dump($metrics);
$tmpcur = [
'x' => 0,
'y' => 0
];
foreach($this->_manas as $mana){
//if(!self::isExistingMana($mana)) continue;
// On charge le fichier
$manaImage = new Imagick(self::getManaFile($mana));
$size = 0; $yoffset = 0; $xoffset = 0; $advance = 0;
if($manaImage->getNumberImages() == 0) continue;
if(self::isLargeMana($mana)){
// Rendu mana large
$size = (int)($metrics['characterHeight'] * self::LARGE_MANA_RATIO);
//var_dump($size);
$manaImage->resizeImage(0, $size, Imagick::FILTER_LANCZOS, 1);
$yoffset = (int)($metrics['characterHeight'] * self::LARGE_MANA_TOPLINE);
$xoffset = (int)($metrics['characterHeight'] * ( self::LARGE_MANA_EFFECTIVE_WIDTH - self::LARGE_MANA_RATIO) / 2);
$advance = (int)($metrics['characterHeight'] * self::LARGE_MANA_EFFECTIVE_WIDTH);
} else {
// Rendu mana small
$size = (int)($metrics['characterHeight'] * self::SMALL_MANA_RATIO);
//var_dump($size);
$manaImage->resizeImage(0, $size, Imagick::FILTER_LANCZOS, 1);
$yoffset = (int)($metrics['characterHeight'] * self::SMALL_MANA_TOPLINE);
$xoffset = (int)($metrics['characterHeight'] * ( self::SMALL_MANA_EFFECTIVE_WIDTH - self::SMALL_MANA_RATIO) / 2);
$advance = (int)($metrics['characterHeight'] * self::SMALL_MANA_EFFECTIVE_WIDTH);
}
$imagick->compositeImage(
$manaImage, Imagick::COMPOSITE_OVER,
$cursor->x + $tmpcur['x'] + $xoffset,
$cursor->y + $tmpcur['y'] - $yoffset
);
$tmpcur['x'] += $advance;
}
}
这是一个带坐标计算和CompositeImage调用的简单循环。