[PHP/GD] Transparantie probleem bij resize

Pagina: 1
Acties:
  • 197 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • wiels
  • Registratie: November 2007
  • Laatst online: 22-05-2023
Ik heb een script gemaakt dat een transparante watermark (gif/png) over een andere geuploade foto plaats. Deze andere foto kan gif,png of jpeg zijn.
Als de geuploade foto te klein is, resize ik de watermark. Als ik dit doe verliest de watermark foto zijn transparantie en krijgt een zwarte achtergrond.
In alle andere gevallen werkt het script zoals het hoort.

Hoe ik de resize doe:
code:
1
2
$img_new = imagecreatetruecolor ($new_width, $new_height);
imagecopyresampled($img_new, $watermark, 0, 0, 0, 0, $new_width, $new_height, $old_width, $old_height);


Ik draai PHP 5.2.3 en Gd versie 2.0.34.

Heeft er iemand een idee hoe ik de transparantie van de watermark kan bewaren tijdens het resizen?

Acties:
  • 0 Henk 'm!

  • Tepel
  • Registratie: Juni 2006
  • Laatst online: 17-08-2024
PHP heeft een prachtige handleiding met user notes ...

http://nl3.php.net/manual...gecopyresampled.php#79297

0x7F


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
imagealphablending is de functie die je zoekt.

Acties:
  • 0 Henk 'm!

  • wiels
  • Registratie: November 2007
  • Laatst online: 22-05-2023
Ja idd prachtig, echter heb ik dit al geprobeerd, zonder succes...
Hoe ik het geprobeerd heb:
code:
1
2
3
4
5
6
//Create new image identifier that contains the resised image
$img_new = imagecreatetruecolor ($new_width, $new_height); //Create new image identifier
imagecolortransparent($img_new, imagecolorallocate($img_new, 0, 0, 0));
imagealphablending($img_new, false);
imagesavealpha($img_new, true);
imagecopyresampled($img_new, $watermark 0, 0, 0, 0, $old_width, $old_height, $new_width, $new_height);

Ik heb dit geprobeerd met gifs en met pngs: beide formaten verliezen transparantie.

Daarna plak ik het watermerk op de foto met: (maar voor deze stap is de transparantie al verdwenen, dus hier ligt de fout niet.
code:
1
imagecopymerge($this->image, $watermark, $dest_x, $dest_y, 0, 0, $, $size['height'], 100)
Cartman! schreef op woensdag 09 januari 2008 @ 00:35:
imagealphablending is de functie die je zoekt.
Hoe moet ik imagealphablending dan gebruiken? Zoals ik het al geprobeerd heb?

[ Voor 10% gewijzigd door wiels op 09-01-2008 11:17 . Reden: Typo ]


Acties:
  • 0 Henk 'm!

  • wiels
  • Registratie: November 2007
  • Laatst online: 22-05-2023
Bon, ik heb het gevonden. Het voorbeeld op php.net klopt niet helemaal en daardoor zat ik in de problemen.
Het is idd zoals Cartman zegt, de functie imagealphablending die je moet gebruiken. Maar dan uiteraard met true als parameter... en dan ook nog in combinatie met de imagecolortransparant-"hack" van de php.net usercomments bij imagecopyresapled.
Hier een werkend voorbeeld:
code:
1
2
3
4
5
$img_new = imagecreatetruecolor ($new_width, $new_height);
imagecolortransparent($img_new, imagecolorallocate($img_new, 0, 0, 0));
imagealphablending($img_new, true);
        
imagecopyresampled($img_new, $watermark, 0, 0, 0, 0, $new_width, $new_height, $old_width, $old_height);


Ik hoop dat dit sommige mensen tijd kan besparen!