2016-05-09 18 views
0

Ich versuche, ein Mitarbeiterplakat für eine Website zu erstellen, die ich entwickle. Mein Ziel ist es, ein Bild aus einem Verzeichnis auf dem Server eines beliebigen Dateityps (.png, .gif, .jpeg usw.) zu erstellen und es auf ein anderes generate image zu kopieren, das dann an den Browser ausgegeben wird.Konvertieren Sie jeden Typ eines Bildes in PNG und fügen Sie PNG hinzu

Das Problem ist, dass ich benutze:

$final_image = imagecreatefrompng("large_background.png");

für das endgültige Bild zu machen und aus irgendeinem Grunde, wenn ich Profilbilder mit dem Typ JPEGs, GIFs hinzufügen usw. (jeder Typ, der nicht ein jpeg) es funktioniert nicht. Die Bilder erscheinen niemals in der Ausgabe. Wenn ich jedoch pngs verwende, funktioniert es.

Um dieses Problem zu lösen, habe ich versucht, das Bild in ein PNG zu konvertieren und dann ein PNG daraus zu erstellen, wie im folgenden Code gezeigt. Leider klappt es nicht. Profilbilder erscheinen immer noch nicht im Hintergrund.

// get image from database 
$image_from_database = could be a .png, .jpeg, .gif, etc. 

// get the image from the profile images directory 
$path = "profile_images/".$image_from_database; 

// create a png out of the image 
$image = imagecreatefrompng(imagepng($path)); 

// add the $image to my larger $final_image (which is a png) 
imagecopy($final_image, $image, $x, $y, 0,0, $height, $width); 
imagepng($final_image, $ouput_url); 
... 

Kann mir jemand sagen, warum das nicht funktioniert? Meine Profilbilder werden nicht in der Ausgabe des endgültigen Bildes angezeigt.

Meine Fragen,

  • Ist diese Linie imagecreatefrompng(imagepng(...)); überhaupt möglich? Im Wesentlichen möchte ich ein Bild eines beliebigen Typs in ein PNG konvertieren und daraus ein PNG erstellen.
+0

[imagecreatefromjpeg'] (http://php.net/manual/en/function.imagecreatefromjpeg.php) [imagecreatefromgif] (http://php.net/manual/en/function.imagecreatefromgif.php)) –

+0

Wie gesagt, wenn ich das mache, erscheint es nicht, wenn ich es auf das PNG "abbilde". – Nic

+0

Haben Sie gelesen, was [imagepng'] (http://php.net/manual/en/function.imagepng.php) als Argumente erwartet und was es zurückgibt? Oder was es eigentlich macht? –

Antwort

0

ich ein paar lokale Tests nur renne ... Die folgenden Werke:

$src = imagecreatefromgif('test.gif'); 
$dest = imagecreatefrompng('test.png'); 

imagecopy($dest, $src, 0, 0, 0, 0, 100, 100); 

header('Content-Type: image/png'); 
imagepng($dest); 

imagedestroy($src); 
imagedestroy($dest); 

tut also diese:

$src = imagecreatefromstring(file_get_contents('test.gif')); 

Wenn Sie Probleme haben, nach wie vor nach dem Versuch Letztes Beispiel, bitte aktualisieren Sie Ihre Frage. Die tatsächlichen Bilder, die Sie verwenden, wären hilfreich, zusätzlich zu einem funktionalen Codebeispiel.

+0

Können Sie es mit einem JPEG versuchen? Ich finde, dass dies nicht funktioniert, wenn ein JPEG verwendet wird. – Nic

+0

@Nic Ja, es funktioniert auch für mich mit JPEG. –

0

Nachdem Sie ein Bild mit einer imagecreatefrom* Funktion gelesen haben, ist es egal welches Format das Original war.
imagecreatefrom* Funktionen geben eine Bildressource zurück. Wenn das Bild geladen wird, verwenden Sie die interne Darstellung der Bilder und nicht PNG-, JPEG- oder GIF-Bilder.
Wenn die Bilder erfolgreich geladen werden imagecopy sollte keine Probleme mit ihnen haben.

Dieser Code verwendet, um Bilder in verschiedenen Formaten und Arbeiten ohne ein Problem:

$img = imagecreatefrompng('bg.png'); 
$png_img = imagecreatefrompng('img.png'); 
$jpeg_img = imagecreatefromjpeg('img.jpeg'); 
$gif_img = imagecreatefromgif('img.gif'); 

/* or use this, so you don't need to figure out which imagecreatefrom* function to use 
$img = imagecreatefromstring(file_get_contents('bg.png')); 
$png_img = imagecreatefromstring(file_get_contents('img.png')); 
$jpeg_img = imagecreatefromstring(file_get_contents('img.jpeg')); 
$gif_img = imagecreatefromstring(file_get_contents('img.gif')); 
*/ 
imagecopyresampled($img, $png_img, 10, 10, 0,0, 100, 100, 200, 200); 
imagecopyresampled($img, $jpeg_img, 120, 10, 0,0, 100, 100, 200, 200); 
imagecopyresampled($img, $gif_img, 230, 10, 0,0, 100, 100, 200, 200); 

header('Content-Type: image/png'); 
imagepng($img); 

Ihr Beispiel

$image = imagecreatefrompng(imagepng($path)); 

falsch ist.
imagepng wird verwendet, um eine Bildressource als PNG-Bild auszugeben. Wenn Sie einen Pfad als zweites Argument angeben, wird eine PNG-Bilddatei erstellt, andernfalls wird sie wie echo auf die Ausgabe gedruckt.
Was imagepng tatsächlich zurückgibt, ist ein boolescher Wert, der angibt, ob die Ausgabe erfolgreich war.
Sie übergeben dann diesen booleschen Wert an imagecreatefrompng, der einen Dateipfad erwartet. Das ist offensichtlich falsch.

Ich vermute, dass Sie ein Problem mit dem Laden von Bildern haben.
imagecreatefrom* Funktionen zurück FALSE bei Ausfall und Sie sollten überprüfen, wenn Sie irgendwelche Probleme damit haben.

Vielleicht sind Ihre Bildpfade relativ zum doc root und Ihr Arbeitsverzeichnis ist anders.
Oder Sie haben Berechtigungsproblem.
Oder Ihre Bilder fehlen nur.
Es ist unmöglich, von Ihrer Frage zu erzählen.