php生成gif动画的方法
这篇文章主要介绍了php合成或者创建gif动画,并提供了两个实例,感兴趣的小伙伴们可以参考一下
首先需要确认GD库是否正常,如果是合成图片,请确保把分解的图片放在frames的文件夹里面。
GIFEncoder.class.php 类
"Does not supported function for only one image!", 'ERR01' =>"Source is not a GIF image!", 'ERR02' =>"Unintelligible flag ", 'ERR03' =>"Could not make animation from animated GIF source", ); /* ::::::::::::::::::::::::::::::::::::::::::::::::::: :: :: GIFEncoder... :: */ function GIFEncoder ( $GIF_src, $GIF_dly, $GIF_lop, $GIF_dis, $GIF_red, $GIF_grn, $GIF_blu, $GIF_mod ) { if ( ! is_array ( $GIF_src ) && ! is_array ( $GIF_tim ) ) { printf ( "%s: %s", $this->VER, $this->ERR [ 'ERR00' ] ); exit ( 0 ); } $this->LOP = ( $GIF_lop > -1 ) ? $GIF_lop : 0; $this->DIS = ( $GIF_dis > -1 ) ? ( ( $GIF_dis COL = ( $GIF_red > -1 && $GIF_grn > -1 && $GIF_blu > -1 ) ? ( $GIF_red | ( $GIF_grn BUF [ ] = fread ( fopen ( $GIF_src [ $i ], "rb" ), filesize ( $GIF_src [ $i ] ) ); } else if ( strToLower ( $GIF_mod ) == "bin" ) { $this->BUF [ ] = $GIF_src [ $i ]; } else { printf ( "%s: %s ( %s )!", $this->VER, $this->ERR [ 'ERR02' ], $GIF_mod ); exit ( 0 ); } if ( substr ( $this->BUF [ $i ], 0, 6 ) != "GIF87a" && substr ( $this->BUF [ $i ], 0, 6 ) != "GIF89a" ) { printf ( "%s: %d %s", $this->VER, $i, $this->ERR [ 'ERR01' ] ); exit ( 0 ); } for ( $j = ( 13 + 3 * ( 2 BUF [ $i ] { 10 } ) & 0x07 ) ) ), $k = TRUE; $k; $j++ ) { switch ( $this->BUF [ $i ] { $j } ) { case "!": if ( ( substr ( $this->BUF [ $i ], ( $j + 3 ), 8 ) ) == "NETSCAPE" ) { printf ( "%s: %s ( %s source )!", $this->VER, $this->ERR [ 'ERR03' ], ( $i + 1 ) ); exit ( 0 ); } break; case ";": $k = FALSE; break; } } } GIFEncoder::GIFAddHeader ( ); for ( $i = 0; $i BUF ); $i++ ) { GIFEncoder::GIFAddFrames ( $i, $GIF_dly [ $i ] ); } GIFEncoder::GIFAddFooter ( ); } /* ::::::::::::::::::::::::::::::::::::::::::::::::::: :: :: GIFAddHeader... :: */ function GIFAddHeader ( ) { $cmap = 0; if ( ord ( $this->BUF [ 0 ] { 10 } ) & 0x80 ) { $cmap = 3 * ( 2 BUF [ 0 ] { 10 } ) & 0x07 ) ); $this->GIF .= substr ( $this->BUF [ 0 ], 6, 7 ); $this->GIF .= substr ( $this->BUF [ 0 ], 13, $cmap ); $this->GIF .= "!\377\13NETSCAPE2.0\3\1" . GIFEncoder::GIFWord ( $this->LOP ) . "\0"; } } /* ::::::::::::::::::::::::::::::::::::::::::::::::::: :: :: GIFAddFrames... :: */ function GIFAddFrames ( $i, $d ) { $Locals_str = 13 + 3 * ( 2 BUF [ $i ] { 10 } ) & 0x07 ) ); $Locals_end = strlen ( $this->BUF [ $i ] ) - $Locals_str - 1; $Locals_tmp = substr ( $this->BUF [ $i ], $Locals_str, $Locals_end ); $Global_len = 2 BUF [ 0 ] { 10 } ) & 0x07 ); $Locals_len = 2 BUF [ $i ] { 10 } ) & 0x07 ); $Global_rgb = substr ( $this->BUF [ 0 ], 13, 3 * ( 2 BUF [ 0 ] { 10 } ) & 0x07 ) ) ); $Locals_rgb = substr ( $this->BUF [ $i ], 13, 3 * ( 2 BUF [ $i ] { 10 } ) & 0x07 ) ) ); $Locals_ext = "!\xF9\x04" . chr ( ( $this->DIS > 0 ) & 0xFF ) . chr ( ( $d >> 8 ) & 0xFF ) . "\x0\x0"; if ( $this->COL > -1 && ord ( $this->BUF [ $i ] { 10 } ) & 0x80 ) { for ( $j = 0; $j BUF [ $i ] { 10 } ) & 0x07 ) ); $j++ ) { if ( ord ( $Locals_rgb { 3 * $j + 0 } ) == ( $this->COL >> 0 ) & 0xFF && ord ( $Locals_rgb { 3 * $j + 1 } ) == ( $this->COL >> 8 ) & 0xFF && ord ( $Locals_rgb { 3 * $j + 2 } ) == ( $this->COL >> 16 ) & 0xFF ) { $Locals_ext = "!\xF9\x04" . chr ( ( $this->DIS > 0 ) & 0xFF ) . chr ( ( $d >> 8 ) & 0xFF ) . chr ( $j ) . "\x0"; break; } } } switch ( $Locals_tmp { 0 } ) { case "!": $Locals_img = substr ( $Locals_tmp, 8, 10 ); $Locals_tmp = substr ( $Locals_tmp, 18, strlen ( $Locals_tmp ) - 18 ); break; case ",": $Locals_img = substr ( $Locals_tmp, 0, 10 ); $Locals_tmp = substr ( $Locals_tmp, 10, strlen ( $Locals_tmp ) - 10 ); break; } if ( ord ( $this->BUF [ $i ] { 10 } ) & 0x80 && $this->IMG > -1 ) { if ( $Global_len == $Locals_len ) { if ( GIFEncoder::GIFBlockCompare ( $Global_rgb, $Locals_rgb, $Global_len ) ) { $this->GIF .= ( $Locals_ext . $Locals_img . $Locals_tmp ); } else { $byte = ord ( $Locals_img { 9 } ); $byte |= 0x80; $byte &= 0xF8; $byte |= ( ord ( $this->BUF [ 0 ] { 10 } ) & 0x07 ); $Locals_img { 9 } = chr ( $byte ); $this->GIF .= ( $Locals_ext . $Locals_img . $Locals_rgb . $Locals_tmp ); } } else { $byte = ord ( $Locals_img { 9 } ); $byte |= 0x80; $byte &= 0xF8; $byte |= ( ord ( $this->BUF [ $i ] { 10 } ) & 0x07 ); $Locals_img { 9 } = chr ( $byte ); $this->GIF .= ( $Locals_ext . $Locals_img . $Locals_rgb . $Locals_tmp ); } } else { $this->GIF .= ( $Locals_ext . $Locals_img . $Locals_tmp ); } $this->IMG = 1; } /* ::::::::::::::::::::::::::::::::::::::::::::::::::: :: :: GIFAddFooter... :: */ function GIFAddFooter ( ) { $this->GIF .= ";"; } /* ::::::::::::::::::::::::::::::::::::::::::::::::::: :: :: GIFBlockCompare... :: */ function GIFBlockCompare ( $GlobalBlock, $LocalBlock, $Len ) { for ( $i = 0; $i > 8 ) & 0xFF ) ); } /* ::::::::::::::::::::::::::::::::::::::::::::::::::: :: :: GetAnimation... :: */ function GetAnimation ( ) { return ( $this->GIF ); } } ?>
为大家分享两个实例供大家参考:
实例 1 合成gif动画:

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



