Bilder (gif jpg png) nach upload in *.png konvertieren funktioniert nicht.

largo666

Mitglied
hi,

ich wollte in meinem Uploadscript noch eine Erweiterung einbauen die hochgeladene Bilder
vom Ursprungsformat (jpg, gif, png) ins png Format Konvertiert.

Dafür hab ich dieses Script mit eingebaut
PHP:
$complete_path = $base_dir.$upload_dir.$safe_filename;
// Bildformate in png umwandeln

$typ=getimagesize($complete_path);
$typ=$typ[2];

switch ($typ) {
case "1" :
$im = imagecreatefromgif($complete_path);
break;
case "2" :
$im = imagecreatefromjpeg($complete_path);
break;
case "3" :
$im = imagecreatefrompng($complete_path);
break;
}

$name = 'testbild';
//Bild als *.png abspeichern
$new_path = imagepng($im,$name.".png");
echo $new_path; // zu testzwecken
echo '<br><br>'; // zu testzwecken
echo $complete_path; // zu testzwecken

Die hochgeladenen Bilder werden aber nur im Ursprungsformat also so wie sie hochgeladen wurden gespeichert.
Die gewünschte Konvertierung findet nicht statt. Es gibt auch keine Fehlermeldungen das irgendwas nicht funktioniert. Eine neue Datei mit *.png wird auch nicht erstellt.

Zu testzwecken habe ich den neuen Pfad ($new_path) für das Bild per echo ausgegeben.
Ergebnis: 1 (dort sollte eigentlich der Pfad zum konvertierten Bild ausgegeben werden)

bei echo "$complete_path" erscheint die URL vom Bild nach dem sie per move_upload.... in den Zielordner geschoben wurde. Das funktioniert also alles bis dahin.

ich hab keine blassen schimmer warum der mir im $new_path ne 1 ausgibt und nicht den neuen Pfad der neuen Datei
 
was macht denn folgender Code:
PHP:
$complete_path = $base_dir.$upload_dir.$safe_filename; 
// Bildformate in png umwandeln 

$typ=getimagesize($complete_path); 
$typ=$typ[2]; 

switch ($typ) { 
case "1" : 
$im = imagecreatefromgif($complete_path); 
break; 
case "2" : 
$im = imagecreatefromjpeg($complete_path); 
break; 
case "3" : 
$im = imagecreatefrompng($complete_path); 
break; 
default:
echo 'komische Endung...';
break;
} 

$name = 'testbild'; 
//Bild als *.png abspeichern 
$new_path = imagepng($im,$name.".png"); 
echo $new_path; // zu testzwecken 
echo '<br><br>'; // zu testzwecken 
echo $complete_path; // zu testzwecken

?
 
bzw. hier sind ja einige Konstante definiert: http://www.php.net/manual/en/function.exif-imagetype.php

Ich würde vorschlagen, diese auch zu verwenden.

also anstatt case "1" .... case "234"

case IMAGETYPE_JPEG ... case IMAGETYPE_PNG ... usw.


Das macht das Lesen und Warten von deinem Code deutlich einfacher.

Desweiteren dient es der Kompatibilität mit anderen PHP-Versionen.
 
Also im Forfeld wird ein Bild im Format, sagen wir mal *.jpg vom user hochgeladen auf eine festgelegte größe verkleinert. Als nächstes wird der Dateiname geändert und vom Temp Verzeichnis in ein vom script festgeletes Verzeichnis verschoben.
Der neue Pfad und der neue Dateiname wird in der $complete_path gespeichert und an die Datenbank übergeben.

Bis dahin funktioniert alles bestens.

Jetzt zu dem Script oben:

Der komplette Pfad zum Bild ($complete_path) mit dem *.jpg sollte eigentlich als Quelle für die Umwandlung in eine neue Datei mit gleichem Namen und *.png Format sein.

Das Script oben sucht dann das passende Format aus der angegebenen Quelle ($complete_path), generiert ein neues Bild und mit imagepng($im,$name.".png") sollte das Konvertierte Bild dann wieder mit gleichem Namen aber als *.png im selber Ordner gespeichert werden.

Geht nur leider nicht.
 
Zurück