我的問題是,經過我使用的代碼在How to merge transparent PNG with image using PHP?和我合併兩個圖像,第一個是正常的,但第二個是具有透明背景,當我測試它認爲它像這樣http://img508.imageshack.us/img508/6658/testingphp.jpg使用PHP合併兩個圖像?
0
A
回答
1
添加imagealphablending($ frame,true);在imagecopymerge()之前,如果你想保持png幀的透明度在圖像上。
-Raf(從你掛線,小幅回落頁。)
0
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.gif和images02.gif在這個框架的兩個文件夾旁邊
立即運行使用example.php
您也可以從她的
我曾嘗試下載代碼這和它的工作。
與問候
瓦西姆
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; }
0
相關問題
- 1. 用PHP合併兩個圖像
- 2. 如何使用PHP imagecopy()或imagecopymerge()組合/合併兩個圖像?
- 3. 在php中合併兩個圖像
- 4. PHP與imagecopymerge()合併兩個圖像()
- 5. 在php中合併兩個圖像
- 6. OpenCV:使用OpenCV合併兩個圖像
- 7. 合併兩個圖像
- 8. 合併兩個圖像
- 9. 使用CodeIgniter合併兩個圖像圖像操作類
- 10. 用nodejs和graphicsmagick合併兩個圖像
- 11. 使用精靈合併兩張圖像
- 12. 用PHP imagecopy合併兩個PNG圖像不起作用
- 13. Android合併兩張圖像,另一張合併兩張圖像
- 14. 用PHP合併圖像
- 15. 合併圖像php
- 16. PHP合併圖像
- 17. 用PHP GD庫合併兩個PNG圖像
- 18. 用於合併兩個圖像的PHP GD庫
- 19. 如何合併一個兩個圖像?
- 20. WriteableBitmapEx - 合併兩個圖像在一個
- 21. 在php中使用資源ID合併兩張圖像
- 22. 在PHP中使用透明膠片合併兩張圖像
- 23. 在GD中使用php合併圖像
- 24. 在GD中使用php合併圖像
- 25. 使用GD與PHP合併圖像
- 26. 使用php合併兩個PDF
- 27. 使用php合併兩個csv文件
- 28. PHP合併兩個圖像創建一個粉紅色光
- 29. 在C#/。NET中合併兩個圖像
- 30. 合併兩個碼頭圖像
禁用我嘗試它之前,我問的問題,它的葉子'$ frame'圖像,因爲它是 – Mahmoud 2010-12-07 04:56:41