2009-12-27 3 views
6

Avendo solo una risorsa immagine GD valida è possibile scoprire il tipo dell'immagine originale?PHP/GD - Ricerca del tipo di risorsa immagine

Per esempio:

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

Posso ottenere il tipo di immagine originale (PNG) avendo solo la variabile $ immagini disponibili?

+0

la cosa è, con solo un identificatore di risorse di immagine disponibile per il codice, non dovrebbe importare quale fosse il file originale per questo oggetto. perché hai bisogno di sapere? – dqhendricks

risposta

4

Io non la penso così, no. L'immagine $ è nel formato immagine interno di GD dopo che è stata elaborata dalla funzione ImageCreate().

+0

Grazie a Pekka. Purtroppo anche io non la penso così, ma aspetterò ancora un po 'per vedere se qualcuno può inventare un modo per farlo. –

+0

Qual è lo sfondo? Forse c'è una soluzione alternativa al tuo problema? –

+1

Questo è corretto - l'immagine è nel formato interno di GD in modo che possa essere riprodotta in qualsiasi formato disponibile. L'unico modo per rilevare il formato è utilizzare il file immagine originale. –

9

Io non so se si può fare dalla variabile immagine $, ma per ottenere il MimeType, di solito si può usare qualsiasi dei quattro:

// 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); 

Dalla tua descrizione domanda prendo vuoi utilizzare un file remoto, in modo che si possa fare qualcosa di simile per fare questo lavoro:

$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); 

Nota: se la funzione MimeType userete supporta i file remoti, utilizzare direttamente, invece di creare una copia del file prima

Se è necessario il MimeType solo per determinare quale funzione imagecreatefrom utilizzare, perché non caricare prima il file come stringa e quindi lasciare decidere GD, ad es.

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

No, non è quello che voglio dato che non ho accesso al percorso. = \ –

+0

Ma hai accesso a * qualche * percorso, vero? – Gordon

+0

No, non lo fa, solo per la risorsa immagine aperta stessa. –

0

si può solo provare a caricare la risorsa con il caricatore png, e se un'immagine PNG non è, fallirà, restituendo FALSE. Quindi basta ripetere con ciascuno dei formati validi che si desidera avere, e se tutti falliscono, quindi visualizzare un errore.

+0

L'apertura della risorsa non è un problema ... –