最近尝试了一个基本的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,并且不会在两侧进行不必要的剪辑?