Transparentes Bild, Farbe funktioniert danach nicht mehr

Hi,
ich möchte ein Bild erstellen mit transparenten Hintergrund (png) klappt auch nur wenn ich danach noch etwas hinein schreiben möchte mit schwarz kann ich diese Farbe nicht mehr verwenden, obwohl die Funktion viel weiter oben ausgeführt wird (d.h. zuerst Farbe schwarz durch transparenz ersetzen, danach “Hallo” mit schwarzer Farbe drauf schreiben).

Könnt ihr mir einen Tipp geben wo der Fehler ist. Danke schon mal.

LG Flo

[code]$img = imagecreatetruecolor($width, $height);//
if($hintergrund == ‘trans’) {
$color[‘black’] = imagecolorallocate($img, 0, 0, 0);
imagecolortransparent($img, $color[‘black’]);
}
/* Hier kommt noch etwas Code sollte aber unwichtig sein */
// Text hinzufügen
$text = “Der tolle Text”;

$color = ImageColorAllocate($img, 0, 0, 0); //Farbe
$ttf = “./schrift/XFILES.TTF”; //Schriftart
$ttfsize = 10; //Schriftgrˆsse
$angle = 0; //rand(0,5);
$t_x = 140; //von links
$t_y = 20; //von oben
imagettftext($img, $ttfsize, $angle, $t_x, $t_y, $color, $ttf, $text);
[/code]

Das wird wohl so nicht gehen - php.net/manual/en/function.i … parent.php:

[quote]Note:
The transparent color is a property of the image, transparency is not a property of the color.[/quote]

Ich glaube, da wirst du erst mal die schwarzen Bildpunkte mit einer anderen, noch nicht im Bild benutzten Farbe ersetzen müssen, diese dann auf transparent setzen - und danach kannst du dann mit schwarz noch was reinzeichnen.

(Alles unter der Annahme, dass wir hier von paletten-basierten Bildern sprechen.)

hi,
ist ja doof … d.h. ich kann die farbe danach nicht mehr verwenden … da ich ja ein zufalls bild aus der datenbank einbinde ist das richtig doof …
Kennst du noch eine andere Möglichkeit die vielleicht funktioniert ohne das man eine Farbe “verliert”

lg flo

Ja - nicht mit palettenbasierten Bildern arbeiten.

Alphatransparenz, wie 32-Bit-PNG sie anbietet, ist eine Eigenschaft des jeweiligen Bildpunktes, nicht der Farbe - die kannst du für jeden einzelnen Pixel separat so setzen, wie du sie haben willst.

Hi,
danke könntest du mir das bitte genauer erklären oder einen Link posten … Stehe grad irgendwie auf dem Schlauch

Danke Flo

de.wikipedia.org/wiki/Alphakanal
de.wikipedia.org/wiki/Portable_N … enschaften
php.net/manual/en/ref.image.php - die mit “alpha” im Namen genauer anschauen

Gut Danke so weit erledigt aber die schrift macht irgendwie noch Probleme. Habe es schon mit 2 Schriftarten versucht aber bei beiden im Hintergrund ist es weiß. Kannst du mir da auch noch einen Tipp geben ob das an der Schriftart oder an was anderem liegt.

z.b. http://imagesandmore.mx.am/altrot-.png

[code]<?php
header(“Content-Type: image/png”);

$ausw = explode(’-’,$_GET[‘ausw’]);
$hintergrund = $ausw[0];

//Zufallsbild aus Datenbank
@mysql_connect(“localhost”,“imi”,"");
@mysql_select_db(“imagesandmore_pi”);
$sql = “SELECT pic_kl FROM images WHERE freigabe=‘1’ ORDER BY RAND() LIMIT 0,1”;
$result = @mysql_query($sql);
$row = @mysql_fetch_assoc($result);
$bild = $row[pic_kl];
// Bild laden
$imgzufall = imagecreatefrompng($bild);
$imgzufall2 = imagecreatefrompng("./schrift/leer.png");
$img = imagecreatefrompng("./schrift/leer.png");
// Bilder Transparent machen
imagealphablending($img, false);
imagesavealpha($img, true);
imagealphablending($imgzufall2, false);
imagesavealpha($imgzufall2, true);

// Bild Infos
$width = ‘468’;
$breite = imagesx($imgzufall);
$height = ‘60’;
$hoehe = imagesy($imgzufall);

// Farben
$color[‘altrot’] = imagecolorallocate($img, 139, 8, 10);
$color[‘black’] = imagecolorallocate($img, 0, 0, 0);
$color[‘black’] = imagecolorallocate($img, 0, 0, 0);

if($hintergrund == ‘altrot’) {
imagefill($img, 0, 0, $color[‘altrot’]);
imagefill($imgzufall2, 0, 0, $color[‘altrot’]);
} else if($hintergrund == ‘trans’) {
imagecolortransparent($img, $color[‘black’]);
} else if($hintergrund == ‘trans’) {
imagecolortransparent($img, $color[‘black’]);
}
//Zufallsbild verkleinern
if ($hoehe > ‘50’) {
$breite_old = $breite;
$hoehe_old = $hoehe;
$hoehe = ‘50’;
$breite = intval($breite_old * ($hoehe / $hoehe_old));
imagecopyresampled($imgzufall2, $imgzufall, 0, 0, 0, 0, $breite, $hoehe, $breite_old, $hoehe_old);
} else {
$imgzufall2 = $imgzufall;
}

$width = ‘5’;
$height = ‘5’;
imagecopy($img, $imgzufall2, $width, $height, 0, 0, 130, 130);

// Text hinzufügen
$text = “Dieses und viele weitere Bilder auf”;
$link = “imagesandmore.mx.am”;

$color = ImageColorAllocate($img, 0, 0, 0); //Farbe
if($ausw[1] != ‘2345’) {
$ttf = “./schrift/XFILES.TTF”; //Schriftart
} else {
$ttf = “./schrift/zh.ttf”; //Schriftart
}
$ttfsize = 10; //Schriftgrˆsse
$angle = 0; //rand(0,5);
$t_x = 130; //von links
$t_y = 20; //von oben
imagettftext($img, $ttfsize, $angle, $t_x, $t_y, $color, $ttf, $text);
imagettftext($img, $ttfsize, 0, 300, 50, $color, $ttf, $link);

// Bild anzeigen
imagepng($img);

// Speicher freigeben
imagedestroy($img);

?>[/code]

Ist es denn Absicht/sinnvoll, daß $color zuerst als array verwendet
wird und dann als normale Variable?
Warum verwendest du keinen Variablennamen, der nicht mit dem
array-Namen kollidiert?

Jedenfalls reicht es ja für die transparente Farbe bei der
Palettenversion eine Farbe zu verwenden, die man nachher nicht
verwenden will - Vorteil bei der Palettenversion ist jedenfalls, daß
die Dateien erheblich kleiner sind als bei teiltransparenten PNGs,
insbesondere wenn man nur sehr wenige Farben in der Palette hat.
Ein anderer Vorteil ist, daß sogar ältere Versionen des MSIE
einen einfachen Transparenzkanal bei PNG darstellen können.

Jedenfalls als ich das vor Jahren mal brauchte, traten da keine
Probleme auf, weil ich natürlich immer genau wußte, welche Farben
ich brauche und welche nicht …

Hi,
das mit dem $color war aus versehen mehrere Scripte aus mehreren einzelnen Funktionen zusammen gefügt. Ist jetzt aber ausgebessert. Danke

Das doofe ist halt das Bilder (von Digitalcamera) aus der DB verwendet werden und das schon etwas doof ist wenn eine Farbe “nicht” geht.

des mit der schrift hat sich nach vielen ausprobieren von schriftarten noch immer nicht geändert :frowning:

lg flo

Das Bild aus der Digitalkamera ist dann ja vermutlich ein JPEG/JFIF
oder eine Rohdatenformat. Sowas eignet sich nicht für Transparenz.
Da ist es am besten, daraus erstmal per Handarbeit mit dem
Gimp etc ein Bild mit einer Palette von möglichst wenigen Farben
zu machen, zu gucken, welche Farbe nicht belegt ist und diese dann
als transparent zu definieren und nutzen, um Bereiche transparent
zu machen.

Verwendet man den alpha-Kanal für eine PNG-Ausgabe,
kann die Angelegenheit etwas trickreicher werden, hat dann aber
prinzipiell den Vorteil, daß man das Bild nicht zuvor manuell
vorbereiten muß. Da natürlich JPEG/JFIF gar nicht transparent
ist, muß man da dann schon etwas unternehmen, damit man
überhaupt irgendwas transparent bekommt…