2010-12-07 77 views

回答

1

添加imagealphablending($ frame,true);在imagecopymerge()之前,如果你想保持png幀的透明度在圖像上。

-Raf(從你掛線,小幅回落頁。)

+0

禁用我嘗試它之前,我問的問題,它的葉子'$ frame'圖像,因爲它是 – Mahmoud 2010-12-07 04:56:41

0

與Imagick嘗試圖像:: compositeImage

+0

imageick是我的主人 – Mahmoud 2010-12-07 04:45:43

1

這裏是代碼做一個使用example.php

<?php 
include "GIFEncoder.class.php"; 

     $frames =array(); 
     $frames [ 0 ] = "frames/images01.gif"; 
     $frames [ 1 ] = "frames/images01.gif"; 
     $framed [ ] = 5; 

/* 
    GIFEncoder constructor: 
    ======================= 

    image_stream = new GIFEncoder (
         URL or Binary data 'Sources' 
         int     'Delay times' 
         int     'Animation loops' 
         int     'Disposal' 
         int     'Transparent red, green, blue colors' 
         int     'Source type' 
        ); 
*/ 
$gif = new GIFEncoder (
         $frames, 
         $framed, 
         0, 
         2, 
         0, 0, 0, 
         "url" 
    ); 
/* 
    Possibles outputs: 
    ================== 

    Output as GIF for browsers : 
     - Header ('Content-type:image/gif'); 
    Output as GIF for browsers with filename: 
     - Header ('Content-disposition:Attachment;filename=myanimation.gif'); 
    Output as file to store into a specified file: 
     - FWrite (FOpen ("myanimation.gif", "wb"), $gif->GetAnimation ()); 
*/ 
Header ('Content-type:image/gif'); 
echo $gif->GetAnimation (); 
?> 

現在創建GIFEncoder.class。 php

<?php 


Class GIFEncoder { 
var $GIF = "GIF89a";  /* GIF header 6 bytes */ 
var $VER = "GIFEncoder V2.05"; /* 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=>"Does 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 >> 16) & 0xFF) && 
        ord ($Locals_rgb { 3 * $j + 1 }) == (($this->COL >> 8) & 0xFF) && 
        ord ($Locals_rgb { 3 * $j + 2 }) == (($this->COL >> 0) & 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); 
} 
} 
?> 

Place images01.gifimages02.gif在這個框架的兩個文件夾旁邊

立即運行使用example.php

您也可以從她的

Download Link

我曾嘗試下載代碼這和它的工作。

與問候

瓦西姆

0

我寫的100%相同的要求你的。該定義是不言自明的。

 
function create_watermarked_image($image,$overlay,$align='right',$valign='bottom',$offset_w=0,$offset_h=0) 
{ 
    if(!in_array($align,array('left','center','right'))) 
    $align='right'; 
    if(!in_array($valign,array('top','middle','bottom'))) 
    $valign='bottom'; 
    $background=$image; 
    // Find base image size 
    $iwidth = imagesx($image); 
    $iheight = imagesy($image); 
    // Turn on alpha blending 
    imagealphablending($image, true); 
    // Get the size of overlay 
    $owidth = imagesx($overlay); 
    $oheight = imagesy($overlay); 
    //align 
    if($align=='left') 
    $x = $offset_w; 
    elseif($align=='center') 
    $x= $iwidth/2 - $owidth/2; 
    elseif($align=='right') 
    $x=$iwidth - $owidth - $offset_w; 
    //valign 
    if($valign=='top') 
    $y = $offset_h; 
    elseif($valign=='middle') 
    $y = $iheight/2 - $oheight/2 ; 
    elseif($valign=='bottom') 
    $y = $iheight - $oheight - $offset_h; 
    // Overlay watermark 
    imagecopy($image, $overlay, $x, $y, 0, 0, $owidth, $oheight); 
    return $image; 
} 

另一個實用的功能養活上面一個

 
function create_image_from_file($img,$file_name=false) 
{ 
    if (!file_exists($img)) 
    return -1; 

    if(!$file_name) 
    $ext = strtolower(substr($img, strrpos($img, ".") + 1)); 
    else 
    $ext = strtolower(substr($file_name, strrpos($file_name, ".") + 1)); 

    switch ($ext) 
    { 
     case 'jpg': 
     $img2=imagecreatefromjpeg($img); 
     break; 
     case 'jpeg': 
     $img2=imagecreatefromjpeg($img); 
     break; 
     case 'png': 
     $img2=imagecreatefrompng($img); 
     break; 
     case 'gif': 
     $img2=imagecreatefromgif($img); 
     break; 
     default: 
     return -2; 
    } 
    if($img2) 
    return $img2; 
    else 
    return -3; 
}