用PHP生成GIF动画的方法

用PHP生成GIF动画的方法
首先,您需要确认GD库是正常的,如果它是一张合成图片,请确保分解后的图片放在框架文件夹中。

gifencoder.class.php类

<
{ gifencoder类
VaR的GIF =GIF89a美元的头6个字节的GIF; / * * /
VaR版本=gifencoder美元v2.06 ;编码器版本 / * * /

VaR buf =阵列(美元);
var $ = 0;
var = 2;
var = 1;
VaR img = - 1美元;

var(=数组)
err00'does不支持函数= >只有一个图像!
err01'source不是GIF = 形象!
err02= >不知所云的旗帜
err03'could不使动画= >从GIF动画
);

*
:::::::::::::::::::::::::::::::::::
::
::GIFEncoder…
::
* /
函数的GIFEncoder(
gif_src美元,gif_dly美元美元美元,gif_lop,gif_dis,
gif_red美元,gif_grn美元美元美元,gif_blu,gif_mod
{)
如果(!is_array($ gif_src)!is_array($ gif_tim)){
printf(%s %s
出口(0);
}
美元->罗布=($ gif_lop > 1)gif_lop:0美元;
美元-> DIS =($ gif_dis > 1)(($ gif_dis<3)gif_dis美元:3):2;
美元-> col =($ gif_red > - 1美元- 1美元gif_blu gif_grn > > 1)
(gif_red |美元(美元gif_grn<8)|($ gif_blu<16)):1;

为($我= 0;$我<计数(gif_src美元美元);i++){
如果(strtolower($ gif_mod)= URL){
美元-> buf { } = fread(fopen($ gif_src {我},rb),文件大小($ gif_src {我}));
}
如果(strtolower($ gif_mod)=仓){
美元-> buf { } = {我} gif_src美元美元;
}
{其他
printf(%s %s(%s)!
出口(0);
}
如果(substr(美元-> buf {我},0, 6)!=GIF87asubstr(美元-> buf {我},0, 6)!=GIF89a){ }
printf(%s %d %s
出口(0);
}
为(J =(13 + 3 *(2美元但{我} { 10 })0x07)))),$ K = true;$ K;J + +){)
开关(美元-> buf { } { } $我J){
案例!:
如果((substr(美元-> buf {我},(J + 3),8))= = Netscape){
printf(%s %s(%s源)!
出口(0);
}
打破;
案例;:
$ = false;
打破;
}
}
}
GIFEncoder::GIFAddHeader();
为($我= 0;美元美元我buf);i++){
GIFEncoder::GIFAddFrames(我gif_dly美元美元美元,{我});
}
GIFEncoder::GIFAddFooter();
}
*
:::::::::::::::::::::::::::::::::::
::
::gifaddheader…
::
* /
函数的GIFAddHeader(){
CMAP = 0美元;

如果(ORD(美元-> buf { 0 } { 10 })0x80){
CMAP = 3 *(2美元但{ 0 } { 10 })0x07))))

美元-> GIF = substr(美元-> buf { 0 },6, 7);
美元-> GIF = substr(美元-> buf { 0 },13,$ CMAP);
美元-> GIF 377 3 1 13netscape2.0!。GIFEncoder::GIFWord(美元->罗布) 0 ;
}
}
*
:::::::::::::::::::::::::::::::::::
::
::GIFAddFrames…
::
* /
功能gifaddframes($,$){

locals_str美元= 13 + 3 *(2美元但{我} { 10 })0x07)))

locals_end美元= strlen(美元-> buf {我})locals_str - 1美元;
locals_tmp美元= substr(美元-> buf {我},locals_str美元,美元locals_end);

global_len = 2美元但{ 0 } { 10 })0x07);
locals_len美元= 2美元但{我} { 10 })0x07);

global_rgb美元= substr(美元-> buf { 0 },13,
3 *(2 buf { 0 } { 10 } )))))))
locals_rgb美元= substr(美元-> buf {我},13,
3 *(2美元但{我} { 10 })))))) 0x07

locals_ext美元=!xf9 X04 。Chr(($这-> DIS<2)+ 0)。
Chr((($ > 0)0xff)。Chr(($ > > 8)0xff)。 x0 X0 ;

如果(美元->西> 1 ORD(美元-> buf {我} { 10 })0x80){
为(J = 0美元;J buf {我} { 10 })0x07)));$ J++){)
如果(
ORD($ locals_rgb * $ J + 0 { 3 })= =(美元->西> 0)0xff
ORD($ locals_rgb * $ J + 1 { 3 })= =(美元->西> 8)0xff
ORD($ locals_rgb * $ J + 2 { 3 })= =(美元->西> 16)0xff
{)
locals_ext美元=!xf9 X04 。Chr(($这-> DIS<2)+ 1)。
Chr((($ > 0)0xff)。Chr(($ > > 8)0xff)。CHR(J)。 X0 ;
打破;
}
}
}
开关($ locals_tmp { 0 }){
案例!:
locals_img美元= substr(locals_tmp美元,8, 10);
locals_tmp美元= substr(locals_tmp美元,18,strlen($ locals_tmp)- 18);
打破;
案例
locals_img美元= substr(locals_tmp美元,0, 10);
locals_tmp美元= substr(locals_tmp美元,10,strlen($ locals_tmp)- 10);
打破;
}
如果(ORD(美元-> buf {我} { 10 })0x80美元-> IMG > 1){
如果($ global_len = = $ locals_len){
如果(gifencoder::gifblockcompare(global_rgb美元美元美元,locals_rgb,global_len)){
美元-> GIF =(locals_ext locals_img美元美元。locals_tmp美元);
}
{其他
$字节= ORD($ locals_img { { 9 });
$字节0x80 | =;
美元0xf8字节;
$字节(ORD | =(美元-> buf { 0 } { 10 })0x07);
$Locals_img {9} = Chr ($byte);
美元-> GIF =(locals_ext locals_img美元美元。locals_rgb美元。locals_tmp美元);
}
}
{其他
$字节= ORD($ locals_img { { 9 });
$字节0x80 | =;
美元0xf8字节;
$字节(ORD | =(美元-> buf {我} { 10 })0x07);
为locals_img { 9 } = CHR($字节);
美元-> GIF =(locals_ext locals_img美元美元。locals_rgb美元。locals_tmp美元);
}
}
{其他
美元-> GIF =(locals_ext locals_img美元美元。locals_tmp美元);
}
美元-> img = 1;
}
*
:::::::::::::::::::::::::::::::::::
::
::gifaddfooter…
::
* /
功能gifaddfooter(){
$;
}
*
:::::::::::::::::::::::::::::::::::
::
::gifblockcompare…
::
* /
功能gifblockcompare(globalblock美元美元美元,localblock,Len){

($ i = 0;$ i;
如果(
globalblock美元* $我{ 3 } { 3 + 0!= $ localblock * $我+ 0 } | |
globalblock美元* $我{ 3 } { 3 + 1!= $ localblock * $我+ 1 } | |
globalblock美元{ 3 * $我+ 2 }!= $ localblock { 3 }我+ 2美元
{)
返回(0);
}
}

返回(1);
}
*
:::::::::::::::::::::::::::::::::::
::
::GIFWord…
::
* /
函数的GIFWord($ int){

返回(CHR($ int 0xff)。Chr((($ int > 8)0xff)));
}
*
:::::::::::::::::::::::::::::::::::
::
::getanimation…
::
* /
功能getanimation(){
返回($);
}
}

>
给大家分享两个例子供大家参考

例1合成GIF动画:

< PHP
包括gifencoder。类。PHP ;
*
从源代码构建帧数组…
* /
如果($ DH = opendir(帧 / )){
(假)!= =($ DAT = readdir($ DH))){
如果($)!= !{){
$帧;
$框架} = 5;
}
}
closedir($ DH);
}
*
gifencoder构造函数:
=======================

image_stream =新GIFEncoder(
URL或二进制data'sources
int'delay时代
int'animation循环
int'disposal
int'transparent红,绿,蓝颜色的
int'source型
);
* /
为GIF =新GIFEncoder(
$帧,
为框架,
0,
2,
0, 0, 0,
url
);
*
可能的输出:
此路不通

浏览器输出GIF:
头('content-type:图像/ GIF);
为具有文件名的浏览器输出gif:
头('content-disposition:依恋;文件名= myanimation。gif);
输出作为文件存储到指定文件中:
FWrite(FOpen(myanimation GIF 。
* /
头('content-type:图像/ GIF);
echo GIF -> getanimation();
>
示例2创建GIF动画:

< PHP
包括gifencoder。类。PHP ;

ob_start();
board_width = 60美元;
board_height = 60美元;
pad_width = 5美元;
pad_height = 15美元;
ball_size = 5美元;
game_width = board_width美元美元美元美元ball_size pad_width * 2;
game_height美元美元美元ball_size board_height =;

$ x=0;
Y元=兰特(0美元game_height);
十五美元=兰特(1,10);
关于美元=兰特(1,10);
元数组($ x,y);
做{
十美元=十五美元;
Y元= $ Yv;
如果(X元> $ game_width){
十五美元= 1 *十五美元;
X元= game_width美元($ X $ game_width);
} elseif(X<0){
十五美元= 1 *十五美元;
x = abs($ x);
}
如果(Y元> $ game_height){
关于美元= 1×$ Yv;
Y元= game_height美元-(Y元至game_height);
} elseif($ Y<0){
关于美元= 1×$ Yv;
Y元= ABS(Y元);
}
元数组($ x,y);
}($ x!= $ PT { 0 } { 0 } | | Y元!= $ { { 0 } { 1 });

$ I = 0;
而(isset(合铂{我})){
美元($ board_width图像=画面欣赏,board_height美元);
imagecolorallocate(合图像,0,0,0);
颜色= imagecolorallocate美元(合图像,255255255);
2美元= imagecolorallocate(美元的形象,255,0,0);

如果(合铂{我} { 1 } + $ pad_height << board_width美元){
Imagefilledrectangle($ 0美元的图像,,PT { $我} { 1 },pad_width美元美元美元,PT {我} { 1 } + pad_height美元,美元的颜色);
其他{ }
Imagefilledrectangle(合形象,0,board_width美元美元美元pad_height,pad_width,board_width美元,美元的颜色);
}
Imagefilledrectangle(合图像,board_width pad_width美元美元,0美元美元,board_width,board_height,2美元);
Imagefilledrectangle(合图像,pad_width美元美元美元+ PT {我} { 0 },ball_size美元美元美元+ PT {我} { 1 } - ball_size美元,美元美元美元pad_width + PT {我} { 0 } + ball_size美元,美元美元美元ball_size + PT {我} { 1 },美元色);
/ / imagesetpixel(美元美元美元形象,PT {我} { 0 },{我} PT美元美元美元{ 1 },颜色);
imagegif($图像);
销毁一图像($图像);
{ } = ob_get_contents ImageData美元();
ob_clean();
+1美元;
}

为GIF =新GIFEncoder(
数据元,
100,
0,
2,
0, 0, 1,
bin
);

头('content-type:图像/ GIF);
echo GIF -> getanimation();
>
以上是如何教你如何使用PHP或创建GIF动画。我希望你能学习两个分享的例子。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部