2009-12-27 7 views
6

Hat nur eine gültige GD-Bildressource, ist es möglich, den Typ des Originalbildes herauszufinden?PHP/GD - Finden von Bildressourcentyp

Zum Beispiel:

$image = ImageCreateFromPNG('http://sstatic.net/so/img/logo.png'); 

Kann ich den Original-Bildtyp (PNG) erhalten, die nur die $ Bildgröße zur Verfügung?

+0

Die Sache ist, mit nur einer Image-Ressource-Kennung für Ihren Code, sollte es egal sein, was die ursprüngliche Datei für dieses Objekt war. Warum willst du das wissen? – dqhendricks

Antwort

4

Ich glaube nicht, nein. $ image befindet sich im internen GD-Format, nachdem es von der ImageCreate()-Funktion verarbeitet wurde.

+0

Danke Pekka. Leider glaube ich das auch nicht, aber ich werde noch ein bisschen warten, um zu sehen, ob irgendjemand einen Weg finden kann, dies zu tun. –

+0

Was ist der Hintergrund? Vielleicht gibt es eine andere Problemumgehung für Ihr Problem? –

+1

Dies ist korrekt - das Bild ist im GD-internen Format, so dass es in jedem verfügbaren Format ausgegeben werden kann. Die einzige Möglichkeit, das Format zu erkennen, ist die Verwendung der Originalbilddatei. –

9

Ich bin nicht sicher, ob es aus dem $ Bild variabel gemacht werden kann, aber die Mimetype zu erhalten, können Sie in der Regel eine der vier verwenden:

// with GD 
$img = getimagesize($path); 
return $img['mime']; 

// with FileInfo 
$fi = new finfo(FILEINFO_MIME); 
return $fi->file($path); 

// with Exif (returns image constant value) 
return exif_imagetype($path) 

// deprecated 
return mime_content_type($path); 

Aus Ihrer Frage Beschreibung möchte ich Sie zu verwenden, um eine Remote-Datei, so dass Sie so etwas tun könnte diese Arbeit zu machen:

$tmpfname = tempnam("/tmp", "IMG_"); // use any path writable for you 
$imageCopy = file_get_contents('http://www.example.com/image.png'); 
file_put_contents($tmpfname, $imageCopy); 
$mimetype = // call any of the above functions on $tmpfname; 
unlink($tmpfname); 

Hinweis: wenn die Mimetype-Funktion werden Sie unterstützt Remote-Dateien verwenden, verwenden Sie es direkt, anstatt eine Kopie der Datei zu erstellen zuerst

Wenn Sie den MimeType nur benötigen, um festzustellen, welche imagecreatefrom-Funktion zu verwenden ist, warum laden Sie die Datei nicht zuerst als String und lassen GD dann entscheiden, z.

// returns GD image resource of false 
$imageString = file_get_contents('http://www.example.com/image.png'); 
if($imageString !== FALSE) { 
    $image = imagecreatefromstring($imageString); 
} 
+0

Nein, das ist nicht was ich will, da ich keinen Zugriff auf den Pfad habe. = \ –

+0

Aber Sie haben Zugang zu * einigen * Pfad, oder? – Gordon

+0

Nein, das tut er nicht, nur für die geöffnete Bildquelle selbst. –

0

Sie könnten nur versuchen, die Ressource mit dem png loader laden, und wenn es nicht ein PNG-Bild ist, wird es scheitern, Rückkehr FALSCH. Wiederholen Sie dann mit jedem der gültigen Formate, die Sie haben möchten, und wenn alle Fehler auftreten, dann zeigen Sie einen Fehler an.

+0

Das Öffnen der Ressource ist kein Problem ... –