2009-12-27 14 views
6

Al tener solo un recurso de imagen GD válido, ¿es posible encontrar el tipo de imagen original?PHP/GD - Búsqueda de tipo de recurso de imagen

Por ejemplo:

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

¿Puedo obtener el tipo de imagen original (PNG), que tiene solamente la variable $ imagen disponible?

+0

La cosa es que, con solo un identificador de recurso de imagen disponible para su código, no debería importar lo que el archivo original era para este objeto. ¿Por qué necesitas saberlo? – dqhendricks

Respuesta

4

No lo creo, no. $ imagen está en formato de imagen interna de GD después de que ha sido procesada por la función ImageCreate().

+0

Gracias Pekka. Desafortunadamente, tampoco lo creo, pero voy a esperar un poco más para ver si alguien puede encontrar la forma de hacerlo. –

+0

¿Cuál es el fondo? Tal vez hay una solución diferente a su problema? –

+1

Esto es correcto: la imagen está en formato interno de GD, por lo que puede enviarse a cualquier formato disponible. La única forma de detectar el formato es usar el archivo de imagen original. –

9

No estoy seguro de si se puede hacer desde la variable imagen $, pero para obtener el tipo MIME, normalmente se puede utilizar cualquiera de los cuatro:

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

Desde su descripción pregunta tomo desea utilizar un archivo remoto, por lo que podría hacer algo como esto para hacer este trabajo:

$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: Si la función de los MimeType que va a utilizar es compatible con archivos remotos, utilizarlo directamente, en lugar de crear una copia del archivo primero

Si necesita el MimeType solo para determinar qué función de imagecreatefrom utilizar, ¿por qué no cargar primero el archivo como una cadena y luego dejar que GD decida, p.

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

No, eso no es lo que quiero ya que no tengo acceso a la ruta. = \ –

+0

Pero usted tiene acceso a * alguna * ruta, ¿verdad? – Gordon

+0

No, no lo hace, solo al recurso de imagen abierto en sí. –

0

usted podría intentar cargar el recurso con el cargador png, y si no es una imagen PNG, se producirá un error, volviendo FALSO. Luego simplemente repita con cada uno de los formatos válidos que desea tener, y si todos fallan, muestre un error.

+0

Abrir el recurso no es un problema ... –

Cuestiones relacionadas