Foros del Web » Programando para Internet » PHP »

Problema header('Content-type: image/jpeg');

Estas en el tema de Problema header('Content-type: image/jpeg'); en el foro de PHP en Foros del Web. Buenas noches Les cuento mi problema, estoy tratando de adaptar un script que encontre para hacer thumbnails de imagenes, el cual esta incluido en la ...
  #1 (permalink)  
Antiguo 27/12/2009, 21:17
 
Fecha de Ingreso: octubre-2006
Mensajes: 78
Antigüedad: 17 años, 6 meses
Puntos: 1
Problema header('Content-type: image/jpeg');

Buenas noches

Les cuento mi problema, estoy tratando de adaptar un script que encontre para hacer thumbnails de imagenes, el cual esta incluido en la funcion crearthumbnail.

Código PHP:
    <div id="principal">
            <table class="tablatamanio" width="245">
            <tr>
        <?
            
include("Conexion.php");    
            
// Variables globales
            
$i 0;
            
// Defino Parametros del paginator    
            
$_pagi_sql "SELECT * FROM fotos where categoria = 1";
            
$_pagi_cuantos 6;
            
$_pagi_nav_estilo linkspaginador;        
            include(
"paginator.inc.php");
            
//$consulta = mysql_query("Select * from promociones",$connect);
            
while($rows mysql_fetch_array($_pagi_result))
                {
                    if (
$i == 2)
                    {
                        echo 
"</tr>\n";
                        echo 
"<tr>\n";    
                        
$i 0;
                    }
                    
//echo "<td><center><img onClick=\"visualizar('".$rows['Dirimg']."');\" width=\"100\" height=\"100\" src=\"".$rows['Dirimg']."\"></center></td>";
                    
echo "<td><center>";
                    
crearthumbnail($rows['Dirimg']);
                    echo 
"</center></td>";
                    
$i++;
                }
                echo 
"</table>";
                echo 
$_pagi_navegacion;
                    
mysql_close($connect);

                function 
crearthumbnail($ruta)
                {
                    
$fuente = @imagecreatefromjpeg($ruta);
                    
$imgAncho imagesx ($fuente);
                    
$imgAlto imagesy($fuente);
                    
$imagen imagecreate(100,100);
                    
imagecopyresized($imagen,$fuente,0,0,0,0,100,100,$imgAncho,$imgAlto);
                    
header('Content-type: image/jpeg');
                    
imagejpeg($imagen);
                }
                
?> 

   </div>
El problema es que cuando miro el resultado en la página me devuelve este warning:

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\Doscolumnas\fotos.php:8) in C:\xampp\htdocs\Doscolumnas\fotos.php on line 161
ÿØÿà�JFIF������ÿþ�>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!222222222222222222222222222222222222222222222 22222ÿÀ��d�d"�ÿÄ�����������  ÿÄ�µ���}�!1AQa"q2‘¡#B±Á RÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ƒ„…†‡
...


alguna recomendación.?

Desde ya muchas gracias por su disposición

Saludos.
  #2 (permalink)  
Antiguo 27/12/2009, 21:33
 
Fecha de Ingreso: noviembre-2007
Ubicación: Lanus, Buenos Aires
Mensajes: 178
Antigüedad: 16 años, 5 meses
Puntos: 14
Respuesta: Problema header('Content-type: image/jpeg');

Sea lo que sea que haya en fotos.php en la linea 161, debes ponerlo antes de escribir algo en la pagina, es decir que no puedes hacer ningun echo, ni codigo html, ni nada

Saludos!
  #3 (permalink)  
Antiguo 27/12/2009, 21:40
 
Fecha de Ingreso: octubre-2006
Mensajes: 78
Antigüedad: 17 años, 6 meses
Puntos: 1
Respuesta: Problema header('Content-type: image/jpeg');

Cita:
Iniciado por rodrigo_00 Ver Mensaje
Sea lo que sea que haya en fotos.php en la linea 161, debes ponerlo antes de escribir algo en la pagina, es decir que no puedes hacer ningun echo, ni codigo html, ni nada

Saludos!
Muchas gracias por la respuesta a la brevedad.

Te comento:

la linea 161 es : imagejpeg($imagen);

El problema es que yo quiero que la foto quedé justamente en el lugar donde llamo la función.

No se me viene la idea de como podría reacondicionar el código para que quede bien.
  #4 (permalink)  
Antiguo 27/12/2009, 22:12
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problema header('Content-type: image/jpeg');

el header() lo único que hace es cambiar el tipo de documento que vas a enviar finalmente al navegador...

entonces, al utilizar HTML ... no le puedes decir al nevagador que le estas enviando una imagen, eso no tiene sentido, al menos no directamente.... osea, su información binaria (todo esos caracteres raros que ves en el error)

si lo piensas con calma, y recuerda algo de HTML ... bien, para cargar imágenes debes usar <img/>

si necesitas mostrar una imagen creada a partir de PHP en tu documento HTML, pues, entonces necesitas cambiar el src de la misma, y que apunte hacía tu script .php que genera e imprime la imagen...

solo así, y solo ahí es que funciona el header() "conflictivo" de tu problema...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 27/12/2009, 22:25
Avatar de pato12  
Fecha de Ingreso: septiembre-2007
Ubicación: Salta
Mensajes: 1.620
Antigüedad: 16 años, 6 meses
Puntos: 101
Respuesta: Problema header('Content-type: image/jpeg');

Si quieres mostrar directamente, prueba asi:
Código PHP:
Ver original
  1. function crearthumbnail($ruta){
  2.     $fuente = @imagecreatefromjpeg($ruta);
  3.     $imgAncho = imagesx ($fuente);
  4.     $imgAlto = imagesy($fuente);
  5.     $imagen = imagecreate(100,100);
  6.     imagecopyresized($imagen,$fuente,0,0,0,0,100,100,$imgAncho,$imgAlto);
  7.     ob_start();
  8.         imagejpeg($imagen);
  9.         $img_final_code = ob_get_contents();
  10.     ob_end_clean();
  11.     echo "<img src='data:image/jpeg;base64,".base64_encode($img_final_code)."' />";
  12. }
(No probe el codigo :p)
__________________
Half Music - www.halfmusic.com
  #6 (permalink)  
Antiguo 27/12/2009, 22:57
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problema header('Content-type: image/jpeg');

buen hack pato12, aunque, si no me equivoco... te falto también usar chunk_split() después de codificar en base64

eso, según la especificación de data xD
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 27/12/2009, 23:25
 
Fecha de Ingreso: octubre-2006
Mensajes: 78
Antigüedad: 17 años, 6 meses
Puntos: 1
Respuesta: Problema header('Content-type: image/jpeg');

Muchas gracias Pateketrueque y Pato12

Miren, Probe ambas soluciones y funcionaron perfecto!!

Para la de Pateketrueque(por cierto nunca se me hubiera ocurrido, de hecho tuve que investigar un poquillo)

Deje el código asi:

Código PHP:
        <?
            
include("Conexion.php");    
            
// Variables globales
            
$i 0;
            
// Defino Parametros del paginator    
            
$_pagi_sql "SELECT * FROM fotos where categoria = 1";
            
$_pagi_cuantos 6;
            
$_pagi_nav_estilo linkspaginador;        
            include(
"paginator.inc.php");
            
//$consulta = mysql_query("Select * from promociones",$connect);
            
while($rows mysql_fetch_array($_pagi_result))
                {
                    if (
$i == 2)
                    {
                        echo 
"</tr>\n";
                        echo 
"<tr>\n";    
                        
$i 0;
                    }
                    echo 
"<td><center><img onClick=\"visualizar('".$rows['Dirimg']."');\" src=\"Thumb.php?ruta=".$rows['Dirimg']."\"></center></td>";
                    
//echo "<td><center>";
                    //crearthumbnail($rows['Dirimg']);
                    //echo "</center></td>";
                    
$i++;
                }
                echo 
"</table>";
                echo 
$_pagi_navegacion;
                    
mysql_close($connect);
Y un archivo php

Thumb.php

Código PHP:
<?
                    $ruta 
$_GET['ruta'];
                    
$fuente = @imagecreatefromjpeg($ruta);
                    
$imgAncho imagesx ($fuente);
                    
$imgAlto imagesy($fuente);
                    
$imagen imagecreatetruecolor(100,100);
                    
imagecopyresized($imagen,$fuente,0,0,0,0,100,100,$imgAncho,$imgAlto);
                    
header('Content-type: image/jpeg');
                    
imagejpeg($imagen);
?>
De hecho cambié la función Imagecreate() por Imagecreatetruecolor() debido a que con la primera los las imagenes thumbnails perdían considerablemente la calidad del color.


Por otro lado Pato12, tu script funcionó, estaría bueno si tenes un tiempo me digas que es lo que hace sobre todo las lineas que agregaste.

Saludos.

Última edición por Roykssop; 27/12/2009 a las 23:50
  #8 (permalink)  
Antiguo 28/12/2009, 00:44
Avatar de pato12  
Fecha de Ingreso: septiembre-2007
Ubicación: Salta
Mensajes: 1.620
Antigüedad: 16 años, 6 meses
Puntos: 101
Respuesta: Problema header('Content-type: image/jpeg');

Lo que hace, es capturar la imagen en una variable y codificarla en base 64 para que el navegador lo interprete :P
__________________
Half Music - www.halfmusic.com
  #9 (permalink)  
Antiguo 28/12/2009, 00:52
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problema header('Content-type: image/jpeg');

Cita:
Iniciado por pato12 Ver Mensaje
Lo que hace, es capturar la imagen en una variable y codificarla en base 64 para que el navegador lo interprete :P
para mas información:
http://es.wikipedia.org/wiki/Data_URL
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:35.