2011-08-05 14 views
9

Digamos que tengo el código que se ve algo como:visualización de una imagen creada con imagecreatefromstring

<?PHP 

// 
//... stuff here 
// 

$im = imagecreatefromstring($imageData); 

echo "<img src=" . /* what goes here? */ . "alt=\"the image\" />"; 


// 
// more stuff here 
// 
?> 

Qué puedo reemplazar/* lo que pasa aquí? */con lo que se mostrarán mis datos de imagen?

Gracias.

Respuesta

10

Qué puedo reemplazar/* lo que pasa aquí? */con lo que se mostrarán mis datos de imagen?

La ubicación que ha resaltado es el atributo denominado src del img HTML-tagDocs. El valor es un llamado URIDocs.

En su caso, desea que el URI apunte a los datos de la imagen en cuestión. No ha especificado de qué tipo debe salir la imagen, así que supongo que es una imagen PNG en el siguiente ejemplo.

Ahora necesita convertir los datos de su imagen en un URI. La más directa URI para crear a partir de los datos de imagen es el llamado data: URIWikipedia:

<?PHP 

// 
//... stuff here 
// 

$im = imagecreatefromstring($imageData); 

ob_start(); 
imagepng($img); 
$png = ob_get_clean(); 
$uri = "data:image/png;base64," . base64_encode($png); 

echo "<img src=" . $uri /* URI goes here */ . "alt=\"the image\" />"; 

// 
// more stuff here 
// 
?> 

Incluso esta es la manera más directa, no siempre es recomendable hacerlo porque los datos de imagen serán devueltos con el HTML para el navegador. Si la imagen es grande, esto comúnmente se considera una sobrecarga.

En lugar de utilizar el URI data:, también puede colocar allí otro URI, por ejemplo, un URI HTTP que apunta a un script PHP en su servidor que devuelve la imagen. una secuencia de comandos puede ser muy simple:

<?php 
$img = imagecreatefromstring($string); 
header('Content-type: image/png'); 
imagepng($img); 

Esto es comparable a lo que Marc B suggested, see his answer as well.

+0

¡Gracias! El buffer de salida era lo que necesitaba hacer; ¡Ojalá pudiera darte un +5! – veeTrain

0

Primero debe guardar el recurso en un archivo o enviarlo usando algo como imagepng() en una solicitud por separado.

Consulte la documentación de imagecreatefromstring() para obtener más información.

Si desea utilizar un Data URI scheme, puede intentar esto en su lugar:

<?php 

// If your image is binary data. use `base64_encode($imageData)`. 
$imageData = 'iVBORw0KGgoAAAANSUhEUgAAABwAAAASCAMAAAB/2U7WAAAABl' 
      . 'BMVEUAAAD///+l2Z/dAAAASUlEQVR4XqWQUQoAIAxC2/0vXZDr' 
      . 'EX4IJTRkb7lobNUStXsB0jIXIAMSsQnWlsV+wULF4Avk9fLq2r' 
      . '8a5HSE35Q3eO2XP1A1wQkZSgETvDtKdQAAAABJRU5ErkJggg=='; 

echo '<img src="data:image/png;base64,'. $imageData .'" />'; 
0

Creo que se puede hacer algo como esto ...

$src = "data:image/gif;base64," . $imageData ; 
echo "<img src=\"$src\" alt=\"the image\" />"; 
2
<?php 

$img = imagecreatefromstring($string); 

header('Content-type: image/jpeg'); 
imagejpeg($img); 

debería ser todo lo necesitar. Al hacerlo con la etiqueta de imagen tal como eres, necesitarías sacar la imagen a un archivo temporal y apuntar la etiqueta de la imagen a esa (que incurre en una segunda solicitud HTTP), o usar un data url.

Cuestiones relacionadas