2010-04-13 7 views
6

Quiero poder recuperar una imagen remota de un servidor web, volver a muestrearla, y luego mostrarla en el navegador Y guardarla en un archivo. Aquí es lo que tengo hasta ahora:Obtener imagen remota usando cURL y luego volver a muestrear

$ch = curl_init(); 

// set URL and other appropriate options 
curl_setopt($ch, CURLOPT_URL, "$rURL"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_HEADER, 0); 

// grab URL and pass it to the browser 
$out = curl_exec($ch); 

// close cURL resource, and free up system resources 
curl_close($ch); 

$imgRes = imagecreatefromstring($out); 
imagejpeg($imgRes, $filename, 70); 

header("Content-Type: image/jpg"); 
imagejpeg($imgRes, NULL, 70); 
exit(); 

actualización

actualizado para reflejar respuesta correcta sobre la base de la discusión a continuación

Respuesta

4

Puede buscar el archivo en un recurso GD usando imagecreatefromstring():

imagecreatefromstring() devuelve un identificador de imagen que representa la imagen obtenida a partir de los datos especificados. Estos tipos se detectarán automáticamente si su compilación de PHP los admite: JPEG, PNG, GIF, WBMP y GD2.

desde allí, es bastante sencillo usar imagecopyresampled().

Extiéndalo usando imagejpeg() o el formato de salida que más le convenga.

Hacer una salida con un nombre de archivo:

imagejpeg($image_resource, "/path/to/image.jpg"); 

continuación, enviar el mismo recurso al navegador:

header("Content-type: image/jpeg"); 
imagejpeg($image_resource); 

dependiendo del formato de la imagen, es posible que desee utilizar el imagepng() o funciones imagegif() en su lugar.

Es posible que desee trabajar con diferentes formatos de salida dependiendo del tipo de archivo de entrada. Puede recuperar el tipo de archivo de entrada usando getimagesize().

Recuerde que puede ajustar la calidad de la imagen JPEG resultante utilizando el parámetro $quality. El valor predeterminado es 75%, lo que puede parecer bastante malo.

+0

Gracias ... He actualizado mi pregunta ahora con su información ... Esto requiere dos ejemplos de la imagen, a diferencia de una sola ... de nuevo parece ineficaz. ¿Cuál es una mejor manera de hacer esto? – Chris

+0

@Chris ¿Dos remuestreos de la imagen? ¿Por qué? Almacena el mismo recurso reescalado en el archivo jpeg y lo sirve. ¿Por qué harías el remuestreo dos veces? –

+0

Lo siento, malinterpreté lo que escribiste. He actualizado el código en mi pregunta. Crea el jpeg una vez con una calidad inferior. Presumiblemente, esto es suficiente para reducir el tamaño del archivo? Después de eso lo guardo en un archivo, pero para servirlo necesito leer el archivo nuevamente, ¿no puedo guardarlo temporalmente en la memoria o es una carga insignificante? – Chris

Cuestiones relacionadas