PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   PHP Developer Forum (https://www.php-resource.de/forum/php-developer-forum/)
-   -   Transparenz in PNG mit PHP erstellen - Seltsames Problem (https://www.php-resource.de/forum/php-developer-forum/103970-transparenz-in-png-mit-php-erstellen-seltsames-problem.html)

BananaJo 25-04-2013 16:09

Transparenz in PNG mit PHP erstellen - Seltsames Problem
 
Ich arbeite an einem Script wie dem hier: stylefruits.de | Trendige Outfits von Frauen für Frauen
Ich bearbeite JPG Bilder und entferne die weiße Hintergrundfarbe und mache diese transparent.. so weit so gut.

das ist das Script mit dem ich die weiße Farbe entferne und transparent mache
PHP-Code:

<?php
$o 
"original.jpg";

$img imagecreatefromjpeg($o);

$index imagecolorallocatealpha($img255255255127); 
imagecolortransparent($img$index);

imagepng($img"png_image.png");

?>
<img src="png_image.png" />

Ok, das Bild ist nun transparent, aber leider nur im Bowser direkt nach der Ausgabe! Wenn ich es nun mit Photoshop öffne, ist die Transparenz weg und im weiterem Code unten ist sie auch nicht mehr vorhanden!

Das ist der Code, mit dem ich die PNGs übereinander lege, und so ein JPG mit mehreren PNGs erstelle.

Das funktioniert mit diesem Bild http://tuxpaint.org/stamps/stamps/an...artoon/tux.png super und auch wenn ich ein transparentes PNG Bild in Photoshop erstelle, funktioniert es auch 100% !!! Nur leider nicht wenn das PNG Bild mit dem oberem Code erstellt wird.

PHP-Code:

$canvas imagecreatetruecolor(500500);

$weiss imagecolorallocate($canvas255255255);
imagefill($canvas00$weiss);

imagealphablending($canvasfalse); 
imagesavealpha($canvastrue);

for(
$i 0$i 2$i++)
{
    
$w 300$h 300;

    if(
$i == 1){
    
$left 200$top 200;
    }else {
    
$left 100$top 100;
    }

    
$source "http://tuxpaint.org/stamps/stamps/animals/birds/cartoon/tux.png"//works fine!!!!
    
$source "png_image.png"//does not work

    
$source imagecreatefrompng($source);          

    
$c 0;
    
$o_w imagesx($source);
    
$o_h imagesy($source);

    
imagecopyresampled($canvas$source$left$top00$w$h$o_w$o_h);        
}

$dir "./";
imagejpeg($canvas"image.jpg"); 

ich verstehe einfach nicht, wieso die erstellte PNG nicht mehr transparent ist.

Bitte helft mit endlich damit das hier gelöst werden kann :)

DANKE!!!!

UzumakiNaruto 25-04-2013 16:40

schreibfehler eingeschlichen als du die dateinamen für uns geändert hast oder ist das auch sonst der fall?

PHP-Code:

imagepng($img"image.png");

?>
<img src="png_image.png" /> 


BananaJo 25-04-2013 16:51

Zitat:

schreibfehler eingeschlichen als du die dateinamen für uns geändert hast oder ist das auch sonst der fall?
Sorry war nur hier falsch.. hab ich geändert

mephisto111 25-04-2013 17:08

Transparenzproblem
 
Hallo BananaJo,

ersetze mal die Zeile

PHP-Code:

$index imagecolorallocatealpha($img255255255127); 

durch

PHP-Code:

$index imagecolorexact($img255255255); 


BananaJo 25-04-2013 17:18

Zitat:

$index = imagecolorexact($img, 255, 255, 255);
ich auch auch schon probiert.. das macht leider keinen unterschied

Melewo 25-04-2013 17:31

Dabei fällt mir ein, was ich schon vor Wochen erledigen wollte und zwischendurch leider in Vergessenheit geriet (eine Beschreibung fertig zu machen). Nun gut, was ich in Deinem Code nicht sehe, den Bereich, den Du mit Transparenz füllen und so abspeichern möchtest. Irgendwo müsste doch da doch wohl imagefilledrectangle folgen, also der Bereich, der in diesem Fall so groß sein sollte, wie das Bild und den Du mit Transparenz füllen möchtest oder nicht? Zumindest hatte ich das so verstanden und bei meinen Scripts so gehandhabt. Imagefill geht wohl auch, wenn das ganze Bild mit Transparenz gefüllt werden soll, habe ich nur noch nicht probiert.

Text in Bilder mit PHP und imagettftext einfügen

Für was ist diese Zeile gut?

HTML-Code:

<img src="png_image.png" />
Rufst Du das Bild zum Speichern bzw. im Browser nicht über das Script auf und setzt dabei einen Image-Header?

PHP-Code:

header("Content-type: image/png"); 

Nicht das ich mich gut auskennen würde mit der Bildverarbeitung, nur hat es praktisch funktioniert, auch mit der Transparenz. Bei mir rufe ich die Bilder mit der Script-Seite images.php auf, die enthält einen Image-Header und HTML hat in dieser Script-Seite nichts verloren. Anschließend kann ich dann die gespeicherten Bilder wie normale Bilder verwenden und mit image.png aufrufen.

BananaJo 25-04-2013 18:35

PHP-Code:

$c 255;
$trans imagecolorallocatealpha($img$c$c$c127);
imagecolortransparent($img$trans);
imagefilledrectangle($img00$w$h$trans); 

bring leider auch nicht viel... genau das selbe problem..

das Bild transparent zu bekommen ist ja kein Problem, nur eben, wenn ich es wieder aufrufe um es weiter zu bearbeiten, dann ist die transparenz weg oder der Hintergrund ist schwarz.

also ich schlage mich nun schon 2 Wochen mit diesem Problem rum und glaube langsam, dass es einfach nicht mit PHP möglich ist.

Wie bereits gesagt, funktioniert es super, wenn ich eine PNG direkt in Photoshop erstelle und dann verarbeite, funktioniert alles super... nur leider nicht, wenn ich die PNG mit PHP erzeuge..

Melewo 25-04-2013 19:15

Zitat:

Zitat von BananaJo (Beitrag 666114)
PHP-Code:

<?php
$o 
"original.jpg";

$img imagecreatefromjpeg($o);

$index imagecolorallocatealpha($img255255255127); 
imagecolortransparent($img$index);

imagepng($img"png_image.png");

?>


Wo ich mir jetzt nicht sicher bin, Du öffnest ein jpg und erstellst ein jpg und speicherst es dann mit png. Ob das so geht, weiß ich nicht, da JPG und Transparenz irgendwie nicht zusammen passen. Weiß jetzt nicht was Photoshop alles kann, arbeite für meine Belange mit PSP, doch kenne es da gar nicht anders, als dass ich ein JPG-Bild nicht mit Transparenz speichern kann. Würde mal sagen, speichere ein Bild erst als PNG, öffne es dann mit imagecreatefrompng und nicht mit imagecreatefromjpeg, rufe die Script-Seite (ohne HTML) mit dem entsprechenden Image-Header im Browser auf, vielleicht bringt das mehr.

BananaJo 25-04-2013 20:01

alo transparenzen sind nur bei PNG möglich.
Leider funktioniert das auch nicht... ich probiere es mal mit ImageMagic .. das soll das deutlich mehr drauf haben.. ich teste es einfach mal..

Melewo 25-04-2013 20:28

Nun gut, habe auch noch etwas experimentiert und nur mit imagefill nichts fertig bekommen, zumindest keine transparente Vorlage zur weiteren Verwendung. Problemlos lassen sich hingegen Bereiche auswählen, mit einer Farbe füllen und diese Farbe transparent schalten. Die Deckfähigkeit der gewählten Farbe wird sozusagen beeinflusst, doch die Ebenen gehen wohl nicht einzeln abzuspeichern oder ich wüsste gerade nicht wie.

PHP-Code:

<?php
header
("Content-Type: image/png");

$bild "test.png";
$img  imagecreatefrompng($bild);

$trans imagecolorallocatealpha($img2550060);
imagefilledrectangle($img007070$trans);

imagepng($img);
imagepng($img"test_image.png");
imagedestroy($img);

// test.png (falls vorhanden) wird aufgerufen mit scriptname.php
?>

Um ein Bild im Browser anzuzeigen und gleichzeitig zu speichern, muss es zweimal mit imagepng ausgegeben werden.

h3ll 25-04-2013 20:51

Wozu soll das alles überhaupt gut sein? Um Bilder transparent darzustellen oder einzufärben braucht man kein PHP. Das kann schon der Browser selber.

BananaJo 25-04-2013 20:57

Zitat:

Wozu soll das alles überhaupt gut sein? Um Bilder transparent darzustellen oder einzufärben braucht man kein PHP. Das kann schon der Browser selber.
das steht doch am Anfang des threads wozu das ganze hier gemacht wird ;)

h3ll 25-04-2013 21:03

Kannst du mal so ein Beispielbild zur Verfügung stellen?

BananaJo 26-04-2013 11:52

Also ich sage nur ImageMagic!!!!!!!

Damit hat es sofort funktioniert und besser als zuvor!!!! Ich bin begeistert!!!
Das resultat ist genau so wie mit Photoshop!! was besseres gibt es nicht!!! :rocks::rocks::rocks::rocks::rocks::rocks::rocks:

UzumakiNaruto 26-04-2013 12:06

hau mal den code raus falls andere auch das problem haben sollten ;-)


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:03 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG