当目的地有点偏离源时,Imagick CompositeImage会变得模糊不清

时间:2016-06-26 18:07:59

标签: php imagemagick imagick

我试图用很多小图标覆盖背景图片。 有时,其中一个越过背景图像的边缘,这似乎使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调用的简单循环。

0 个答案:

没有答案