GD Transparante PNG Mergen

Status
Niet open voor verdere reacties.

xeross

Gebruiker
Lid geworden
13 apr 2007
Berichten
91
Hey,

Ik ben bezig met een gdlib script wat een transparante PNG moet mergen met een jpeg maar de png transparency word gewoon wit.
http://lecowow.com/Mail.gd.php
Code

Code:
<?php
// Load an external image
$Back = imagecreatefromjpeg('./Shared/Images/Mail/Back.jpg');
$Header = imagecreatefrompng('./Shared/Images/Mail/Header1.png');
// Create a 200x200 image
$Image = imagecreatetruecolor(755, 300);

// Set the tile
imagesettile($Image, $Back);

// Make the image repeat
imagefilledrectangle($Image, 0, 0, 754, 299, IMG_COLOR_TILED);
imagecopymerge($Image, $Header, 10, 10, 0, 0, 100, 47, 100);
// Output image to the browser
header('Content-Type: image/jpeg');
imagejpeg($Image, NULL, 90);
imagedestroy($Image);
imagedestroy($Back);
?>

Hoe kan ik de png alsnog transparant maken ?

Bedankt, Xeross
 
Je maakt er een jpeg van. Jpeg ondersteunt geen transparantie...
 
nee kijk de achtergrond is een jpeg, en daar plakt hij een semi transparante png op, maar inplaats van de jpeg te laten ziet vult hij de achtergrond van de png met wit, is het niet mogelijk om daar de jpeg te zien ?
 
Sorry, dat had ik niet begrepen. Dan heb ik geen antwoord op jouw vraag.
 
Ok, dan wacht ik nog wel even, tog bedank voor het reageren.
 
Ik lees wel net op php.net dat je imagecolortransparant nodig hebt. Ik heb nog niet zo heel veel verstand van de GB-lib, dus ik weet niet honders procent zeker waar je die op moet toepassen. Ik denk dat het dan zoiets wordt:

PHP:
<?php
// Load an external image
$Back = imagecreatefromjpeg('./Shared/Images/Mail/Back.jpg');
$Header = imagecreatefrompng('./Shared/Images/Mail/Header1.png');
// Create a 200x200 image
$Image = imagecreatetruecolor(755, 300);
imagecolortransparant($Image); // er is nog een optionele parameter color, daar moet je misschien 255,255,255 invullen.

// Set the tile
imagesettile($Image, $Back);

// Make the image repeat
imagefilledrectangle($Image, 0, 0, 754, 299, IMG_COLOR_TILED);
imagecopymerge($Image, $Header, 10, 10, 0, 0, 100, 47, 100);
// Output image to the browser
header('Content-Type: image/jpeg');
imagejpeg($Image, NULL, 90);
imagedestroy($Image);
imagedestroy($Back);
?>
 
Dat is denk als je een kleur hebt die transparant moet zijn niet als je de alpha van een png wilt gebruiken want die heeft geen kleur.
Owja het was imagecolortransparent laatste a moest een e zijn
 
Je hebt 'm wel nodig:

A tile is an image used to fill an area with a repeated pattern. Any GD image can be used as a tile, and by setting the transparent color index of the tile image with imagecolortransparent(), a tile allows certain parts of the underlying area to shine through can be created.

Bron: http://nl3.php.net/imagesettile
 
by setting the transparent color index of the tile image with imagecolortransparent(), a tile allows certain parts of the underlying area to shine through can be created.
Lijkt alsof het alleen is als je de tile transparent wil make maar zal het is probere
Edit: Nee ook niet, als ik hem op de tile doe werkt niet en op de Header1.png ook niet.
Savealpha en imagealphablending werken ook niet
 
Laatst bewerkt:
Je wilt toch ook alleen de tile transparant maken?

Er staat dat als je een kleur van de 'tegel' doorzichtig maakt, het mogelijk wordt om stukken afbeelding ONDER de 'tegel' er door te laten komen. Volgens mij is dat toch precies wat jij wilt, of begrijp ik het nu nog verkeerd?
 
je ziet dat ding bovenop de achtergrond das Header1.png daar zitten allemaal witte vlakken aan de zijkanten
Header1.png

zoals je kan zien hoort hij een png met transparancy te zijn maar in het gd script haalt hij alle transparency weg en maakt het wit.

En dit is de tile:
Back.jpg
 
Ik ben ook even aan het testen geweest, maar het me lukt niet om de transparency van een .png te behouden... Met een .gif lukt het vanzelf :shocked:
PHP:
<?php
  $Back = imagecreatefromjpeg('./Shared/Images/Mail/Back.jpg');
  $Header = imagecreatefromgif('./Shared/Images/Mail/Header1.gif');
  $Image = imagecreatetruecolor(755, 300);
  imagesettile($Image, $Back);
  imagefilledrectangle($Image, 0, 0, 754, 299, IMG_COLOR_TILED);
  imagealphablending($Image, true);
  $dx=imagesx($Header);
  $dy=imagesy($Header);
  imagecopymerge($Image, $Header, 10, 10, 0, 0, $dx, $dy, 100); 
  header("Content-type: image/jpg"); 
  imagejpeg($Image); 
  imagedestroy($Back); 
  imagedestroy($Header);
  imagedestroy($Image);
?>
 
hmm das nogal vervelend aangezien de png uitfade, wou dat het makkelijker kon maar emails met plaatjes doen nogal moeilijk en als het dan maar 1 plaatje is is dat opgelost
 
En nu lukt het plots weer wel !!!
Op deze pagina kan je zien hoe het er uiteindelijk uitziet, en dit is de gebruikte code:

index.htm:
HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta name="generator" content="texteditor EditPad Pro">
    <title>Demo</title>
  </head>
  <body>
    background.jpg<br>
    <img src="background.jpg"><br><br>
    header.png<br>
    <img src="header.png"><br><br>
    de combinatie<br>
    <img src="image.php">
  </body>
</html>

image.php:
PHP:
<?php
  $back=imagecreatefromjpeg('background.jpg');
  $back_x=imagesx($back);
  $back_y=imagesy($back);
  $bz=$back_y*3;
  $head = imagecreatefrompng('header.png');
  $head_x=imagesx($head);
  $head_y=imagesy($head);
  $img = imagecreatetruecolor($back_x,$bz);
  imagesettile($img, $back);
  imagefilledrectangle($img, 0, 0, $back_x, $bz, IMG_COLOR_TILED);
  $new_x=($back_x-$head_x)/2;
  imagecopy($img, $head, $new_x, 10, 0, 0, $head_x, $head_y); 
  header("Content-type: image/jpg"); 
  imagejpeg($img); 
  imagedestroy($back); 
  imagedestroy($img);
  imagedestroy($head);
?>
 
t werkt zie niet waarom mischien omdat content type jpg is inplaats van jpeg maar dat is tog alleen client side, ja en je hebt wat variables voor breedte enz gebruikt.

Bedankt, Ik ga probere het te vervormen tot het oude maar werkend.
 
oops... die jpg moet inderdaad eigenlijk jpeg zijn...
PHP:
header("Content-type: image/jpeg");
maar dat is dus niet de reden waarom het oorspronkelijke script niet werkte...
Blijkbaar ligt het verschil in het gebruik van "imagecopy" ipv "imagecopymerge"

Met "imagecopymerge" zal je het gecopieerde deel in zijn geheel een bepaalde transparantie geven met de laatste parameter (0=volledig transparant; 100=volledig opaque).
Met "imagecopy" behoud je de transparante kleur van het gecopieerde deel.

EDIT: Waarom imagecopymerge wel werkt met een .gif snap ik ook niet...
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan