[PHP/GD] Transparante PNG over een andere PNG

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Goede avond, daar ben ik voor de 2de keer met een GD probleem.
De laatste keer had ik een probleem waar Soultaker mij op een oplossing wist te wijzen.

Deze keer gaat het echter over een plaatje over een andere plakken met imagecopy.

Ik heb 2 plaatjes (beide PNG-32). Het hoofdplaatje (destination) moet gewoon zo blijven als het is, maar het source-plaatje is gedeeltelijk transparant.

Kijk hier even om te zien wat er gebeurd:
http://www.darkjedibrotherhood.com/goa/goa4.php

Het gedeelte dat transparant hoort te zijn is gewoon wit. Ik heb al geprobeerd om gewoon imagecolortransparent te gebruiken, maar zonder succes.

Ik heb al verschillende dingen geprobeerd en weet me er echt geen raad meer mee. Ook Google kon me niet vertellen wat er mis mee is.

Kan iemand me hier uit de brand helpen?

Alvast bedankt.

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 16:28
Gebruik je wel GD2? De oude versie snapt niet zoveel van transparantie (in ieder geval kent 'ie gen alpha channels). Wat voor PNG plaatjes zijn het; op palet gebaseerd met een transparante kleur, of full-colour met alpha channels?

Verder is het misschien handig om de relevante code even te laten zien (het zullen een stuk of 5 a 10 regels zijn).

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function LoadPNG($imgname) {
    $im = @imagecreatefrompng($imgname); /* Attempt to open */
    if (!$im) { /* See if it failed */
        $im  = imagecreate(150, 30); /* Create a blank image */
        $bgc = imagecolorallocate($im, 255, 255, 255);
        $tc  = imagecolorallocate($im, 0, 0, 0);
        imagefilledrectangle($im, 0, 0, 150, 30, $bgc);
        /* Output an errmsg */
        imagestring($im, 1, 5, 5, "Error loading $imgname", $tc);
    }
    return $im;
}

$chargeimg = LoadPNG("charge.png");

$goa = LoadPNG("goa.png");

imagecopy($goa, $chargeimg, 42, 277, 0, 0, 160, 160);

ImagePNG($goa);


Uit phpinfo():
GD Support enabled
GD Version bundled (2.0 compatible)
FreeType Support enabled
FreeType Linkage with freetype
JPG Support enabled
PNG Support enabled
WBMP Support enabled

En met dat palet of gebaseerd of full-color: hoe check ik dat?

Die charge.png is gegenereerd door een PHP-script die een mask over een plaatje legt. (URL naar script: http://php.amnuts.com/demos/image-mask/)
Het gedeelte wat dan wit eruit ziet had ik weggewerkt met imagecolortransparent en laten opslaan in charge.png.

[ Voor 23% gewijzigd door Verwijderd op 04-05-2004 18:48 ]


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 16:28
Bah, ik had je laatste alinea eerst moeten lezen, voordat ik ging prutsen. Het ligt dus aan dat stomme image-mask script; dat doet helemaal niets met transparantie maar maakt het gemaskte deel gewoon wit (staat er nota bene bij).

Met zowel op palet gebaseerde als full-colour PNGtjes doet GD het uitstekend:
Afbeeldingslocatie: http://hell.student.utwente.nl/~maks/test.phpAfbeeldingslocatie: http://hell.student.utwente.nl/~maks/test.php?id=2
AchtergrondFull-colour
Afbeeldingslocatie: http://hell.student.utwente.nl/~maks/test.php?id=3Afbeeldingslocatie: http://hell.student.utwente.nl/~maks/test.php?id=4
Palet-gebaseerdZogenaamd gemaskt

(Het rechterplaatje is dus een voorbeeld van die website en het wit is dan ook weer gewoon wit).

edit:
Ik heb gezien dat je zelf inmiddels ook zo ver was. Waar het denk ik fout gaat is dat je met imagecolortransparent een transparante kleur kiest voor een pallette based image. Voor een full-colour image (wat het resultaat van die website duidelijk is) werkt dat niet. Sowieso geeft een enkele transparante kleur allemaal lelijke aliasing (zoals ook in het plaatje met Tux te zien is). Het is veel mooier om echte transparantie door middel van een alpha kanaal te gebruiken (zie het plaatje met de papegaai).

De eindconclusie blijft dus het zelfde: knip je plaatje uit met een tekenprogramma dat overweg kan met transparante PNGtjes en maak 'm zelf (je kunt eventueel dan ook gewoon de mask die je al gemaakt had als alpha channel introduceren).

[ Voor 39% gewijzigd door Soultaker op 04-05-2004 19:28 ]


Acties:
  • 0 Henk 'm!

  • bartware
  • Registratie: Juni 2001
  • Laatst online: 25-03-2023

bartware

@jabber.org

Niet om het een of ander, maar ik vind het plaatje met de Toekan ;) net zulke randjes hebben als die met Tux.

edit: vooral goed te zien bij de snavel

[ Voor 17% gewijzigd door bartware op 04-05-2004 19:48 ]

Heb ik me begrepen?
Cycle Vision 2020: 17-20 juli Sportpark Sloten & Wheelerplanet Spaarnwoude


Acties:
  • 0 Henk 'm!

  • LauPro
  • Registratie: Augustus 2001
  • Laatst online: 19-09 16:51

LauPro

Prof Mierenneuke®

Ja maar het gaat denk ik met name om de schaduw, de toekan is gewoon zo pixelig terwijl bij de schaduw er een alpha-channel wordt gebruikt, toch?

Inkoopacties - HENK terug! - Megabit
It is a war here, so be a general!


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 16:28
Mja inderdaad; de rand van de toekan is niet netjes gefeathered zoals wel zou kunnen met een alpha channel. De schaduw geeft in ieder geval aan dat het mogelijk zou zijn. Beetje gemiste kans.
Pagina: 1