mon problème est que, après je l'ai utilisé le code How to merge transparent PNG with image using PHP? et je fusionné deux images, la première est normale, mais le second est a un fond transparent, quand je teste l'image qu'elle considère comme ceci http://img508.imageshack.us/img508/6658/testingphp.jpgfusionner deux images en utilisant PHP?
0
A
Répondre
1
Ajouter imagealphablending ($ frame, true); avant imagecopymerge() si vous souhaitez conserver la transparence du cadre png sur l'image.
-Raf (du fil que vous avez lié, légèrement en bas de la page.)
0
1
Voici le code faire un 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 ();
?>
Maintenant, créez 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);
}
}
?>
Lieu images01.gif et images02.gif dans des cadres à côté dossier ces deux fichiers
Exécutez maintenant example.php
Vous pouvez également télécharger le code de son
J'ai essayé ceci et cela fonctionne.
en ce qui concerne
Wasim
0
Je l'ai écrit pour 100% mêmes exigences que le vôtre. La définition est explicite.
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; }
Une autre fonction utile pour nourrir au-dessus d'un
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
Ce code semble fonctionner: http://www.exorithm.com/algorithm/view/watermark_image
Questions connexes
- 1. Fusionner deux images en C# /. NET
- 2. fusionner deux images par Opencv
- 3. PIL: Composer/fusionner deux images en "Dodge"
- 4. BlackBerry - comment deux fusionner deux images
- 5. Comment "fusionner/fusionner" deux images en utilisant une librairie objective-c?
- 6. Comment fusionner deux images en un seul Jpeg
- 7. Fusion de deux images avec PHP
- 8. Fusionner deux ou plusieurs images dans Android (widget)
- 9. Superposer deux images en utilisant WriteableBitmap
- 10. Séquencer et fusionner des images jpeg en utilisant Python?
- 11. PHP - Fusionner deux tableaux (de même longueur) en un associatif?
- 12. Fusionner deux UIImages
- 13. Comment puis-je fusionner deux répertoires en utilisant opendiff?
- 14. comment fusionner deux images iphone avec une taille d'image variable
- 15. Comment fusionner deux objets?
- 16. fusion d'images en utilisant php dans GD
- 17. comment fusionner des cellules dans Excel en utilisant PHP?
- 18. Fusionner deux jQuery Fonction
- 19. Fusionner deux tables MySQL
- 20. Fusionner deux XMLDOMDocuments
- 21. Comment fusionner deux XmlDocuments en C#
- 22. fusionner deux tables en une seule
- 23. Fusionner deux littéraux objet en javascript
- 24. Fusionner deux types DateTime en C#
- 25. Fusionner deux objets JavaScript
- 26. fusionner deux arborescence splay
- 27. Fusionner deux tables
- 28. Fusionner deux scripts JavaScript
- 29. Faire chevaucher deux images transparentes en utilisant CSS
- 30. transférer des images entre deux iphones en utilisant des gestes
je l'ai essayé avant que je posais la question, il laisse l'image '$ frame' telle qu'elle est – Mahmoud
Jetez un coup d'oeil à ceci peut-être: http://www.php.net/manual/fr/function.imagealphablending.php#77085 – wanovak
nope n'a pas beaucoup aidé – Mahmoud