The following post-processing source code:
Copy CodeThe code is as follows:
<?php
Require_once ("gifencoder.php"); Loading encoded files
$gif = new Gifencoder (); Instantiate a GIF decoding object
$gif->load ("Test.gif"); Load the GIF image to decode
for ($i =0; $i Imgs["Frames"]) ($i + +) {//image data per frame based on the number of frames in the GIF image
$im = imagecreatefromstring ($gif->getgif ($i)); Use the GD library function to turn GIF into a standard
Imagegif ($im, $i. ". GIF "); Save each frame of the generated image data in a file format, and you can also use variables
}
Imagedestroy ($im);
Ob_start ();
For ($i =0;sizeof ($gif->imgs["frames"); $i + +) {
$im =imagecreatefromgif ("0.gif"); Create an image based on a picture per frame
if ($i >0) {//Not first frame copy picture and first frame merge
$frame =imagecreatefromgif ("$i. gif"); Reads the image of the current frame
$w = Imagesx ($frame); Get Image width
$y = Imagesy ($frame); Get Image Height
Imagecopy ($im, $frame, 0,0,0,0, $w, $y); Copy and merge the current frame image and the first frame image
Imagedestroy ($frame); Destroying the current image
}
Imagejpeg ($im, $i. " Frame.jpg "); Save to JPG format after merging
$im =imagecreatefromjpeg ($i. " Frame.jpg "); Re-create images from JPG format
Imagegif ($im); Convert to GIF format
Imagedestroy ($im); Destroying images
$imagedata [] = Ob_get_contents (); Create image data for this frame
Ob_clean ();
}
$diy []=0;//Start delay time
$gif = new Gifencoder ($imagedata, $diy, 0,2,0,0,0, "bin"); Instantiate a GIF encoded object
Ob_start ();
Header (' content-type:image/gif ');
echo $gif->getanimation ();
?>
The above code is basically a complete process of reading a GIF image, decoding it, and then encoding it into a GIF image.
With this you can grab the GIF image and modify it on the Internet. Even with PHP, you can make some GIF images yourself.
Gifencoder class Source:
Copy the Code code as follows:
<?php
Class Gifencoder {
var $GIF = "gif89a"; /* GIF Header 6 bytes */
var $VER = "Gifencoder V2.06"; /* Encoder version */
var $BUF = Array ();
var $LOP = 0;
var $DIS = 2;
var $COL =-1;
var $IMG =-1;
var $ERR = Array (
' ERR00 ' = ' 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 = (3 * (2 << (ord ($this->buf [$i] {ten}) & 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] {ten}) & 0x80) {
$cmap = 3 * (2 << (ord ($this->buf [0] {ten}) & 0x07));
$this->gif. = substr ($this->buf [0], 6, 7);
$this->gif. = substr ($this->buf [0], $cmap);
$this->gif. = "!/377/13NETSCAPE2.0/3/1". Gifencoder::gifword ($this->lop). "/0";
}
}
/*
:::::::::::::::::::::::::::::::::::::::::::::::::::
::
:: Gifaddframes ...
::
*/
function Gifaddframes ($i, $d) {
$Locals _STR = 3 * (2 << (ord ($this->buf [$i] {ten}) & 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] {ten}) & 0x07);
$Locals _len = 2 << (ord ($this->buf [$i] {ten}) & 0x07);
$Global _rgb = substr ($this->buf [0], 13,
3 * (2 << (ord ($this->buf [0] {ten}) & 0x07));
$Locals _rgb = substr ($this->buf [$i], 13,
3 * (2 << (ord ($this->buf [$i] {ten}) & 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] {ten}) & 0x80) {
for ($j = 0; $j < (2 << (ord ($this->buf [$i] {ten}) & 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 >>) & 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, strlen ($Locals _tmp)-18);
Break
Case ",":
$Locals _img = substr ($Locals _tmp, 0, 10);
$Locals _tmp = substr ($Locals _tmp, ten, strlen ($Locals _tmp)-10);
Break
}
if (Ord ($this->buf [$i] {ten}) & 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] {ten}) & 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] {ten}) & 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);
}
}
?>
http://www.bkjia.com/PHPjc/824708.html www.bkjia.com true http://www.bkjia.com/PHPjc/824708.html techarticle paste the following source code: Copy the Code as follows: Php require_once ("gifencoder.php");//load encoded file $gif = new Gifencoder ();//Instantiate GIF decode object $gif-load ("t ...