1

最近尝试了一个基本的jQuery“行军蚂蚁”效果,基于http://www.sunpig.com/martin/archives/2010/02/10/marching-ants-in-css.html

jQuery 代码(它不是一个插件)在 JSFiddle 上:http: //jsfiddle.net/mwvdlee/xTZuZ/很好。

该站点上提供的动画 GIF 具有固定大小,我想创建一个简单的动画 GIF 生成器来创建同一主题的多种尺寸、颜色和样式。为了做到这一点,我破解了以下 PHP 代码:

// Marching ants

$width      = 16;
$height     = 16;
$horizontal = true;
$bgcolor    = '#00ff0000';
$fgcolor    = '#0000ffff';

$animation  = new Imagick();

$frame      = new Imagick();
$frame->newimage($width, $height, $bgcolor);
$frame->setimageformat('gif');
$frame->setimagedelay(10);  // 1/100th seconds
$frame->setimagedispose(2);

for ($f = 0; $f < $width; ++$f) {
    $rows = $frame->getPixelIterator();
    foreach($rows as $y => $columns) {
        foreach($columns as $x => $pixel) {
            $color = $bgcolor;

            // top half
            if ($y < $height * .5) {
                if (($x + $f) % $width < $width * .5) {
                    $color = $fgcolor;
                }
            } else {
                if (($width + $x - $f) % $width >= $width * .5) {
                    $color = $fgcolor;
                }
            }

            $pixel->setColor($color);

            $rows->syncIterator();
        }
    }

    $animation->addimage($frame);
}

$animation->setformat('gif');
$animation->setimageformat('gif');
$animation = $animation->deconstructimages();
$gif = $animation->getimagesblob();

if (!error_get_last()) {
    header('Content-Type: image/gif');
    echo $gif;
} else {
    var_dump(error_get_last());
}

这使用了几乎没有文档记录的 Imagick 类,而不是 GD,因为我需要将 Imagick 用于其他代码,并且宁愿坚持使用一个框架进行所有编码。

问题是它似乎在动画过程中切掉了侧面。我怀疑这与 GIF 处理方法有关。使$bgcolor不透明并使用处理方法 0 或 1 也可以修复它,但现在 GIF 没有透明度。

有谁知道如何修复此代码以获得具有透明度的动画 GIF,并且不会在两侧进行不必要的剪辑?

4

0 回答 0