• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

imagecreate PNG - Transparenzen

Die Zahl

Neues Mitglied
Huhu ihrse,

Ich baue eine Schnittstelle für mein kleines MMOG in PHP. Jedoch stoße ich auf eine Hürde, die ich mit meinen Büchern und Google nicht lösen konnte. Ich hoffe, ihr könnt mir ein wenig unter die Arme greifen.

Wie der Titel schon sagt, habe ich ein Problem mit Transparenzen von PNG-Bilder.

Ich möchte ein kleines PNG-Bild in ein größeres, 100x100px Bild schreiben. Das kleine PNG-Bild hat weiße Ränder, die ich gerne transparent auf das größere Bild schreiben möchte.

Praxis-Beispiel: (Link: kleines Bild) mit Weiß zwischen den Schornsteinen soll auf (Link: großes Bild) geschrieben werden, nur das Weiß nicht Weiß, sondern transparent sein soll.
Ich habe es versucht mit "ImageColorAllocate", jedoch ohne den gewünschten Effekt.
(Effekte: Beispiel1, Beispiel2, Beispiel3)

Mein Code:
PHP:
$grundmap = "$abso/welt/grundmap.png";
$grundmap2  = imageCreatefromPNG($grundmap); 
$neuemap  = imageCreate(100,100); 
$neueposix = $map[x];

imageCopy($neuemap, $grundmap2, 0, 0, $neueposix, $map[y],100,100);

$safefile = "$abso/welt/$ied.png";
imagepng($neuemap, $safefile);
## Bis hier wurde aus der großen Karte ein 100x100 Stückchen rausgeschnitten und seperat abgespeichert

$kasernex = $ress[kx];
$kaserney = $ress[ky];
## coordinaten, enthalten nur Zahlen

$meinemap2 = imageCreatefromPNG($safefile);
$kaserneimg = ImageCreateFromPNG($abso."/welt/kaserne.png");
ImageCopy($meinemap2, $kaserneimg, $kasernex, $kaserney, '0', '0', '14', '14');
imagePNG($meinemap2, $safefile);
## hier wird das kleine Bild auf das große Bild geschrieben
Wenn ich jetzt noch "ImageColorAllocate($meinemap2,255,255,255);" mit einbaue kommen, wie oben gelinkt, die unerwünschten Effekte.

Wie stelle ich es ambesten an, das Bild1 das Weiß durchsichtig auf ein 100x100px Ausschnitt von Bild2 geschrieben wird?

Ich hoffe, ich habe mein Problem verständlich beschrieben und danke schonmal an alle die antworten.

Mfg
 
Werbung:
ich arbeite zufällig in einer firma die browser games entwickelt und kann dir nur sagend a sder einfachste weg der besste ist und das ist in diesem fall das du deine kleinen mini milder einfach selber so bearbeitest das das weiß weg ist das sollte sich mit einem programm wie GIMP oder so leicht erledigen lassen selbst für einen anfänger.
 
Nein nein, kein Browsergame. Das soll nur eine Art "Schaukasten" sein für unser Spiel. So das man auf der Seite sehen kann, was man sonnst nur im Spiel sehen kann.
Sprich: SpielerA hat im Spiel Land mit Garten, also sieht man auf der Seite ein Land mit Garten in seinem Profil.

Nun das mit der transparent in dem Minibild... Dies habe ich auch versucht. Jedoch kommt am Ende auch nur Weiß statt transparent. Von daher dachte ich, ich mache beim Minibild gleich weiße Flächen, damit ich PHP sagen kann, welches die transparente Farbe sein soll.
Ich werd mal weiter rumsuchen und auch mal die transparenz mit Gimp testen. Danke dir für die Antwort.

Mfg
 
Werbung:
du machst beim speichern was falsch wenn der hintergrund am ende immernoch weiß ist aber da es eh so winzige bilder sind solltest du gleich das format überdenken und die bilder als gif speichern. das ist auch von den speicher optionen einfacher und du solltest den hintergrund ohne probleme transparent kriegen.

die aufgabe mit php bewältigen zu wollen ist auf jeden fall viel zu üertrieben und kostet rechenleistung die du dir spaaren solltest.
 
zum konvertieren eines ganzen verzeichnisses macht das durchaus sinn.

sieh dir mal die funktion PHP: imagecolortransparent - Manual an.

im wesentlichen gibt man das so aus:
PHP:
// nicht transparent
ImageColorAllocate($img, $R, $G, $B);

// transparente farbe
imagecolortransparent($img, ImageColorAllocate($img, $R, $G, $B));
da du mit farbgrafiken arbeitest, solltest du auch grafiken mit farbe erstellen:
PHP:
$img = ImageCreateTrueColor(width, height);
mit
ImageFill($img,) kannst du dann deine grafik mit einer farbe oder eben mit transparenz füllen. dauf setzt du dann den teil, der farbig sein soll.

in summe also ca solch ein code:
PHP:
$background_color = 'FFFFFF'; // Hintergrund-Farbe des Bildes
$text_color = '000000'; // Text/Rahmen-Farbe.

function OutputImage($img) 
{ 
    header('Content-type: image/png'); 
    ImagePNG($img); 
} 

function colorHex($img, $HexColorString, $tranz=0) 
{ 
    $R = hexdec(substr($HexColorString, 0, 2)); 
    $G = hexdec(substr($HexColorString, 2, 2)); 
    $B = hexdec(substr($HexColorString, 4, 2)); 
    if($tranz == 0) return ImageColorAllocate($img, $R, $G, $B); 
    else return imagecolortransparent($img, ImageColorAllocate($img, $R, $G, $B)); 
}

    $img = ImageCreateTrueColor($width, $height); 
    ImageFill($img, 0, 0, colorHex($img, $background_color,1)); 
    imagerectangle($img,0,0,$width, $height ,colorHex($img, $text_color)); 


OutputImage($img); 
ImageDestroy($img);
 
Zuletzt bearbeitet von einem Moderator:
Sysop, du bist mein Retter!
Danke dir, so hat es funktioniert mit der Funktion imagecolortransparent.
Das weiße wird transparent zwischen den Schornstein: (Bild Link)

Jedoch verwirrt mich etwas:
Du hat mir geraten "ImageCreateTrueColor" zu verwenden. Jedoch verwirft diese Funktion all meine Bild-Einstellungen.
Ich benutze "ImageCreate" anstelle dessen.

Nochmals vielen Dank! Du warst mir eine große Hilfe :)

Mfg
 
Werbung:
imagecreatetruecolor brauchst du aber für png bilder, wenns auch so funktioniert gut aber normalerweise hat man mit imagecreate, transparenz und imagepng immer probleme ^^
 
Zurück
Oben