侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

php生成gif动画的方法

php  /  管理员 发布于 7年前   148

首先需要确认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 < 3 ) ? $GIF_dis : 3 ) : 2;         $this->COL = ( $GIF_red > -1 && $GIF_grn > -1 && $GIF_blu > -1 ) ? ( $GIF_red | ( $GIF_grn << 8 ) | ( $GIF_blu << 16 ) ) : -1;          for ( $i = 0; $i < count ( $GIF_src ); $i++ ) { if ( strToLower ( $GIF_mod ) == "url" ) {     $this->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 << ( ord ( $this->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 < count ( $this->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 << ( ord ( $this->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 << ( ord ( $this->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 << ( ord ( $this->BUF [ 0 ] { 10 } ) & 0x07 );         $Locals_len = 2 << ( ord ( $this->BUF [ $i ] { 10 } ) & 0x07 );          $Global_rgb = substr ( $this->BUF [ 0 ], 13,     3 * ( 2 << ( ord ( $this->BUF [ 0 ] { 10 } ) & 0x07 ) ) );         $Locals_rgb = substr ( $this->BUF [ $i ], 13,     3 * ( 2 << ( ord ( $this->BUF [ $i ] { 10 } ) & 0x07 ) ) );          $Locals_ext = "!\xF9\x04" . chr ( ( $this->DIS << 2 ) + 0 ) . chr ( ( $d >> 0 ) & 0xFF ) . chr ( ( $d >> 8 ) & 0xFF ) . "\x0\x0";          if ( $this->COL > -1 && ord ( $this->BUF [ $i ] { 10 } ) & 0x80 ) { for ( $j = 0; $j < ( 2 << ( ord ( $this->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 << 2 ) + 1 ) . chr ( ( $d >> 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 < $Len; $i++ ) { if    (         $GlobalBlock { 3 * $i + 0 } != $LocalBlock { 3 * $i + 0 } ||         $GlobalBlock { 3 * $i + 1 } != $LocalBlock { 3 * $i + 1 } ||         $GlobalBlock { 3 * $i + 2 } != $LocalBlock { 3 * $i + 2 }     ) {         return ( 0 ); }         }          return ( 1 );     }     /*     :::::::::::::::::::::::::::::::::::::::::::::::::::     ::     ::    GIFWord...     ::     */     function GIFWord ( $int ) {          return ( chr ( $int & 0xFF ) . chr ( ( $int >> 8 ) & 0xFF ) );     }     /*     :::::::::::::::::::::::::::::::::::::::::::::::::::     ::     ::    GetAnimation...     ::     */     function GetAnimation ( ) {         return ( $this->GIF );     } }  ?> 

为大家分享两个实例供大家参考:

实例 1 合成gif动画:

GetAnimation ( ) ); */ Header ( 'Content-type:image/gif' ); echo  $gif->GetAnimation ( ); ?> 

实例 2 创建gif动画:

 $game_width){         $xv = -1*$xv;         $x = $game_width - ($x-$game_width);     }elseif($x < 0){         $xv = -1*$xv;         $x = abs($x);     }     if($y>$game_height){         $yv = -1*$yv;         $y = $game_height - ($y - $game_height);     }elseif($y<0){         $yv = -1*$yv;         $y = abs($y);     }     $pt[] = array($x,$y); }while($x!=$pt[0][0]||$y!=$pt[0][1]);  $i = 0; while(isset($pt[$i])){     $image = imagecreate($board_width,$board_height);     imagecolorallocate($image, 0,0,0);     $color = imagecolorallocate($image, 255,255,255);     $color2 = imagecolorallocate($image, 255,0,0);          if($pt[$i][1] + $pad_height < $board_width){         imagefilledrectangle($image,0,$pt[$i][1],$pad_width, $pt[$i][1]+$pad_height,$color);     }else{         imagefilledrectangle($image,0,$board_width-$pad_height,$pad_width, $board_width,$color);     }     imagefilledrectangle($image,$board_width-$pad_width,0,$board_width, $board_height,$color2);     imagefilledrectangle($image,$pad_width+$pt[$i][0], $ball_size+$pt[$i][1]-$ball_size, $pad_width+$pt[$i][0]+$ball_size, $ball_size+$pt[$i][1],$color);     //imagesetpixel($image,$pt[$i][0],$pt[$i][1],$color);     imagegif($image);     imagedestroy($image);     $imagedata[] = ob_get_contents();     ob_clean();     ++$i; }  $gif = new GIFEncoder(   $imagedata,   100,   0,   2,   0, 0, 1,   "bin"     );      Header ('Content-type:image/gif'); echo $gif->GetAnimation(); ?> 

以上就是教大家如何利用php合成或是创建gif动画,希望大家仔细研究分享的两个实例,有所收获。

您可能感兴趣的文章:

  • PHP使用MPDF类生成PDF的方法
  • php生成高清缩略图实例详解
  • php生成4位数字验证码的实现代码
  • 3种php生成唯一id的方法
  • php生成唯一数字id的方法汇总
  • 使用PHP uniqid函数生成唯一ID
  • php验证码生成代码
  • php二维码生成
  • PHP生成条形码大揭秘
  • php生成静态html页面的方法(2种方法)
  • php生成curl命令行的方法


  • 上一条:
    PHP环境中Memcache的安装和使用
    下一条:
    浅析PHP中call user func()函数及如何使用call user func调用自定义函数
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • 用Time Warden监控PHP中的代码处理时间(0个评论)
    • 在PHP中使用array_pop + yield实现读取超大型目录功能示例(0个评论)
    • Property Hooks RFC在PHP 8.4中越来越接近现实(0个评论)
    • 近期文章
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • Laravel 11.15版本发布 - Eloquent Builder中添加的泛型(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-06
    • 2017-07
    • 2017-08
    • 2017-09
    • 2017-11
    • 2017-12
    • 2018-01
    • 2018-02
    • 2018-03
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-09
    • 2021-02
    • 2021-03
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    • 2024-05
    • 2024-06
    • 2024-07
    • 2024-09
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客