php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 08.12.2011, 13:35  
Neuer Benutzer
 
Registriert seit: 11.02.2010
Beiträge: 28
PHP-Kenntnisse:
Anfänger
suicidus befindet sich auf einem aufstrebenden Ast
Standard GD-Lib für png und gif - Problem

Moin, ich habe eine ganze Menge Bilder, auf die ein Wasserzeichen drauf soll. Da es verschiedene Dateitypen sind, ermittel ich den Typ per:

PHP-Code:
$tmp explode('.'$path);
$endung array_pop($tmp); 
Und frage dann per Switch ab:

PHP-Code:
switch($endung)
{
  case (
"jpg"):
// get image file
header("Content-type: image/jpeg");
$img_name "data/media/$cat_id/$image_media_file";
$img_src imagecreatefromjpeg($img_name);
$width_src imagesx($img_src);
$height_src imagesy($img_src);
// new image size = old image size
$width_dst $width_src;
$height_dst $height_src;
$quality 80;
// create new image
$img imagecreatetruecolor($width_src$height_dst);
imagecopyresampled($img$img_src0000$width_dst$height_dst$width_src$height_src);
// rectangle size for text box
$x1_rect 0;
$y1_rect $height_dst 18;
$x2_rect $width_dst;
$y2_rect $height_dst;
$color imagecolorallocate($img000);
$letter_color imagecolorallocate($img255255255);
$text "rofl";
imagefilledrectangle($img$x1_rect$y1_rect$x2_rect$y2_rect$color);
imagettftext($img120$x1_rect+5$y1_rect+14$letter_color"DroidSans.ttf"$text);
$logo imagecreatefromgif("da.gif");
imagecopymerge($img$logo200500030030080);
// show in browser
imagejpeg($img''$quality);
imagedestroy($img_src);
imagedestroy($img);
    break;

  case (
"gif"):
// get image file
header("Content-type: image/gif");
$img_name "data/media/$cat_id/$image_media_file";
$img_src imagecreatefromgif($img_name);
$width_src imagesx($img_src);
$height_src imagesy($img_src);
// new image size = old image size
$width_dst $width_src;
$height_dst $height_src;
$quality 80;
// create new image
$img imagecreatetruecolor($width_src$height_dst);
imagecopyresampled($img$img_src0000$width_dst$height_dst$width_src$height_src);
// rectangle size for text box
$x1_rect 0;
$y1_rect $height_dst 18;
$x2_rect $width_dst;
$y2_rect $height_dst;
$color imagecolorallocate($img000);
$letter_color imagecolorallocate($img255255255);
$text "rofl";
imagefilledrectangle($img$x1_rect$y1_rect$x2_rect$y2_rect$color);
imagettftext($img120$x1_rect+5$y1_rect+14$letter_color"DroidSans.ttf"$text);
$logo imagecreatefromgif("da.gif");
imagecopymerge($img$logo200500030030080);
// show in browser
imagegif($img''$quality);
imagedestroy($img_src);
imagedestroy($img);
    break;

  case (
"png"):
// get image file
header("Content-type: image/png");
$img_name "data/media/$cat_id/$image_media_file";
$img_src imagecreatefrompng($img_name);
$width_src imagesx($img_src);
$height_src imagesy($img_src);
// new image size = old image size
$width_dst $width_src;
$height_dst $height_src;
$quality 80;
// create new image
$img imagecreatetruecolor($width_src$height_dst);
imagecopyresampled($img$img_src0000$width_dst$height_dst$width_src$height_src);
// rectangle size for text box
$x1_rect 0;
$y1_rect $height_dst 18;
$x2_rect $width_dst;
$y2_rect $height_dst;
$color imagecolorallocate($img000);
$letter_color imagecolorallocate($img255255255);
$text "rofl";
imagefilledrectangle($img$x1_rect$y1_rect$x2_rect$y2_rect$color);
imagettftext($img120$x1_rect+5$y1_rect+14$letter_color"DroidSans.ttf"$text);
$logo imagecreatefromgif("da.gif");
imagecopymerge($img$logo200500030030080);
// show in browser
imagepng($img''$quality);
imagedestroy($img_src);
imagedestroy($img);
    break;

Recht simpel alle und funktioniert auch soweit, das JPG-Bilder das korrekte Wasserzeichen drauf haben. Doch was ist an Gif und PNG falsch. Die werden weder angezeigt, noch kommt eine Fehlermeldung. Es kommt einfach gar nix.
suicidus ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 08.12.2011, 13:48  
Erfahrener Benutzer
 
Registriert seit: 10.01.2010
Beiträge: 386
PHP-Kenntnisse:
Fortgeschritten
ChrisvA befindet sich auf einem aufstrebenden Ast
Standard

Mal ganz allg. gefragt, kommen überhaupt Fehlermeldungen, oder sind diese vielleicht ausgeschaltet.
Auf jeden Fall auch mal error_reporting(E_ALL) einbauen, damit er keine Fehler verschluckt.
ChrisvA ist offline   Mit Zitat antworten
Alt 08.12.2011, 14:13  
Neuer Benutzer
 
Registriert seit: 11.02.2010
Beiträge: 28
PHP-Kenntnisse:
Anfänger
suicidus befindet sich auf einem aufstrebenden Ast
Standard

Es kommt der übliche GD-Fehler bei PNG und GIF:

Die Grafik "..." kann nicht angezeigt werden, weil sie Fehler enthält.

error_reporting(E_ALL); gibt keinerlei Fehler aus.

Irgendwass muss an dem GD-Lib-Code für Gif und PNG falsch sein, ich komm nur nicht hinter.
suicidus ist offline   Mit Zitat antworten
Alt 08.12.2011, 14:25  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

hm zumindest am GIF ist offensichtlich schon mal was faul - denn GIF ist ja kein True-Color Format ... sondern benutzt eine Palette von 256 Farben aus einem Farbraum von entweder 16,77 Mio (rgb 8bit pro Farbe) oder 262144 (rgb 6 bit pro Farbe) das könnte bei deinem imagetruecolor zu merkwürdigem Verhalten führen

PNG dagegen ist TrueColor mit 8 bit-Alpha Kanal (für Transparenz) möglicherweise haut da was nicht hin


Versuche die erzeugten Dateien mal zu speichern und schau dann mit einem geeigneten Programm (z.B. TotalCommander -> F3(=Anzeigen) hinein ... ob du im Binärcode des Bildes irgendwelche PHP-Fehlermeldungen im Klartext lesen kannst)

auch immer "gern" gesehen bei Arbeiten mit der GD ... Speicherprobleme

die Bilder brauchen teils recht viel Arbeitsspeicher (Pixel_X*Pixel_Y*3 für JPG , PNG sogar *4 ) .. da musst du darauf achten, nach einer Operation auch immer sauber den Speicher freizugeben und in der php.ini genügend Speicher zu "reservieren" bzw. zu erlauben
Code:
memory_limit	128M	128M
- in diesen Speicher muss aber alles hinein, dein geöffnetes Originalbild, die Kopie mit dem Wasserzeichen, alle Variablen und benutzten Pufferspeicher
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste
eagle275 ist offline   Mit Zitat antworten
Alt 08.12.2011, 14:39  
Neuer Benutzer
 
Registriert seit: 11.02.2010
Beiträge: 28
PHP-Kenntnisse:
Anfänger
suicidus befindet sich auf einem aufstrebenden Ast
Standard

Ah, danke für den Hinweis...

PHP-Code:
// show in browser
imagepng($img''$quality); 
in

PHP-Code:
// show in browser
imagepng($img); 
abgeändert und PNG geht auch. Mit $quality war die JPEG-Qualität gemeint. Mal gucken ob ich Gif auch noch hinkriege.
suicidus ist offline   Mit Zitat antworten
Alt 08.12.2011, 17:29  
Erfahrener Benutzer
 
Registriert seit: 10.01.2010
Beiträge: 386
PHP-Kenntnisse:
Fortgeschritten
ChrisvA befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von suicidus Beitrag anzeigen
Es kommt der übliche GD-Fehler bei PNG und GIF:

Die Grafik "..." kann nicht angezeigt werden, weil sie Fehler enthält.

error_reporting(E_ALL); gibt keinerlei Fehler aus.

Irgendwass muss an dem GD-Lib-Code für Gif und PNG falsch sein, ich komm nur nicht hinter.
Diese Meldung heiß es wird ein Fehler ausgeworfen, da aber schon der Header die Ausgabe zum "Bild" gemacht hat, wird nur der allgemeine Fehler allgemeine Fehler angezeigt.
ChrisvA ist offline   Mit Zitat antworten
Alt 08.12.2011, 17:49  
fab
Erfahrener Benutzer
 
Benutzerbild von fab
 
Registriert seit: 28.07.2010
Beiträge: 2.308
PHP-Kenntnisse:
Fortgeschritten
fab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblick
Standard

Ja, kommentier mal den Content-type Header aus, dann siehst du auch die Fehlermeldungen.

Nebenbei, pathinfo dürfte dich interessieren, um an die Dateiendung zu kommen.
fab ist offline   Mit Zitat antworten
Alt 09.12.2011, 14:54  
Erfahrener Benutzer
 
Benutzerbild von fireweasel
 
Registriert seit: 20.03.2010
Beiträge: 474
PHP-Kenntnisse:
Fortgeschritten
fireweasel ist ein Lichtblickfireweasel ist ein Lichtblickfireweasel ist ein Lichtblickfireweasel ist ein Lichtblickfireweasel ist ein Lichtblick
fireweasel eine Nachricht über ICQ schicken fireweasel eine Nachricht über AIM schicken fireweasel eine Nachricht über Yahoo! schicken fireweasel eine Nachricht über Skype™ schicken
Standard

Aus der Datei-Endung kann man nicht auf das Grafikformat schließen (höchstens wenn man Microsoft Windows heißt ...). In PHP ist getimagesize() das Mittel der Wahl, wenn man das Grafikdateiformat erfahren will.

Zitat:
Zitat von suicidus Beitrag anzeigen
...
imagepng($img, '', $quality); ... Mit $quality war die JPEG-Qualität gemeint. Mal gucken ob ich Gif auch noch hinkriege.
Imagepng() hat auch einen Quality-Parameter. Nur hat er eine etwas andere Funktion als der bei imagejpeg(). Statt mit Parametern herumzuprobieren ist es meist sinnvoller, im Handbuch nachzuschauen.
fireweasel ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Problem mit Ajax - Session Problem halskrause PHP Tipps 2009 10 12.01.2010 02:27
[Erledigt] Problem mit Mehrsprachigkeit Sniper_Kotaro PHP Tipps 2009 2 16.12.2009 11:47
Problem beim Download Management mistermint PHP Tipps 2009 8 24.10.2009 11:34
Umlaut Problem nokieone PHP Tipps 2009 7 16.10.2009 19:30
Problem mit Basedir in PhP cmuch05 Datenbanken 9 08.01.2009 14:17
[Erledigt] Problem: PHP Selbe Datei mehr als 1 Mal soulan PHP Tipps 2008 13 28.11.2008 22:51
Problem Upload mehrere Dateien und schreiben in DB Lapje PHP Tipps 2008 1 22.10.2008 13:12
utf8 Problem (Daten aus DB auslesen) go1denboy PHP Tipps 2008 1 23.09.2008 12:19
Problem mit swfobjects R4v3r JavaScript, Ajax und mehr 8 21.09.2008 14:17
[Erledigt] Galerie Problem... coraplanet PHP Tipps 2008 4 06.06.2008 13:42
datensätze defekt oder problem mit dem einlesen? Ministry Datenbanken 4 06.07.2006 18:42
problem!!! PHP Tipps 2006 6 08.02.2006 11:06
Smarty und PHP-Skript Problem PHP Tipps 2004-2 2 03.12.2004 22:27
Problem mit alter JavaScript-Funktion woods PHP Tipps 2004 1 13.08.2004 13:34

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
logo kann nicht angezeigt werde weil fehler, gd png color problem, imagecreatefromgif quality, imagettftext alpha imagecopymerge ttf, gd lib transparente png defekt, php probleme mit gd, imagecopymerge($img, $logo, 200, 50, 0, 0, 300, 300, 80);, gdlib gif probleme, php getimage ohne dateiendung, php gd gif problem, gif / png issues gdlib, gd probleme mit png, php smarty die grafik kann nicht angezeigt werden, weil sie fehler enthält.

Alle Zeitangaben in WEZ +2. Es ist jetzt 22:45 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum