Foros del Web » Programando para Internet » PHP »

Imagecreatefromjpeg: imagen negra

Estas en el tema de Imagecreatefromjpeg: imagen negra en el foro de PHP en Foros del Web. Hola a todos! les escribo porque hace un tiempo vengo usando imagecreatefromjpeg para subir imágenes. Mi problema es que la imagen se crea totalmente negra ...
  #1 (permalink)  
Antiguo 27/06/2013, 16:39
 
Fecha de Ingreso: octubre-2009
Mensajes: 107
Antigüedad: 14 años, 5 meses
Puntos: 2
Imagecreatefromjpeg: imagen negra

Hola a todos! les escribo porque hace un tiempo vengo usando imagecreatefromjpeg para subir imágenes.
Mi problema es que la imagen se crea totalmente negra en algunos casos y no puedo darme cuenta por qué.
Esto lo vengo usando hace un año aproximadamente y no he tenido problemas. No he tocado nada más de código justamente porque funcionaba bien, hasta que, recientemente, empezó a generar este problema.... ¿alguien sabe a qué se puede deber?

Les agradezco desde ya!
  #2 (permalink)  
Antiguo 27/06/2013, 17:10
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Imagecreatefromjpeg: imagen negra

Sin ver tu código es imposible saber qué está pasando.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 27/06/2013, 17:39
 
Fecha de Ingreso: octubre-2009
Mensajes: 107
Antigüedad: 14 años, 5 meses
Puntos: 2
Respuesta: Imagecreatefromjpeg: imagen negra

Me acabo de dar cuenta que el problema se dió porque se han estado subiendo archivos png renombrándolos como jpg, lo cual deja un archivo inválido y por eso se ve así.

Con lo cual me surge la idea de chequear el tipo de archivo no solamente así (mediante la extensión):
Código PHP:
function getExtension($str) {
     
$i strrpos($str,".");
     if (!
$i) { return ""; }
     
$l strlen($str) - $i;
     
$ext substr($str,$i+1,$l);
     return 
$ext;
 }


$extension getExtension($filename);
$extension strtolower($extension);
                            
                                
if ((
$extension != "jpg")) 
{
                                
$change='<div class="notificaciones error">
    <div>
    Tipo de archivo desconocido [se acepta únicamente jpg] 
    </div>
</div>'
;
$errors=1;

Sino buscando las propiedades del archivo, lo que será más fiable para que no vuelva a ocurrir casos como estos. Me explico? El problema es que no sé cómo hacerlo...
  #4 (permalink)  
Antiguo 27/06/2013, 17:46
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Imagecreatefromjpeg: imagen negra

No lo se... pero es posible que al intentar manipular la imagen te devuelva un int o un boolean diciendote si fue o no exitosa la operacion... en caso de no poder procesarla (algo que imagino haces ni bien es subida), le informas al usuario que algo salio mal con esa imagen
__________________
Salu2!
  #5 (permalink)  
Antiguo 27/06/2013, 18:32
 
Fecha de Ingreso: octubre-2009
Mensajes: 107
Antigüedad: 14 años, 5 meses
Puntos: 2
Respuesta: Imagecreatefromjpeg: imagen negra

Cita:
Iniciado por Italico76 Ver Mensaje
No lo se... pero es posible que al intentar manipular la imagen te devuelva un int o un boolean diciendote si fue o no exitosa la operacion... en caso de no poder procesarla (algo que imagino haces ni bien es subida), le informas al usuario que algo salio mal con esa imagen
Mira, el código que viene después de lo que puse en mi comentario anterior es este:
Código PHP:
                        $uploadedfile $_FILES['file']['tmp_name'];
                        
$src imagecreatefromjpeg($uploadedfile);

                        echo 
$scr;

                        list(
$width,$height)=getimagesize($uploadedfile);


                        
$newwidth=130;
                        
$newheight=195;
                        
$tmp=imagecreatetruecolor($newwidth,$newheight);


                        
$newwidth1=60;
                        
$newheight1=($height/$width)*$newwidth1;
                        
$tmp1=imagecreatetruecolor($newwidth1,$newheight1);

                                          
imagecopyresampled($tmp,$src,0,0,0,0,$newwidth,$newheight,$width,$height);

                        
imagecopyresampled($tmp1,$src,0,0,0,0,$newwidth1,$newheight1,$width,$height);

                        
$root $_SERVER['DOCUMENT_ROOT'];
                        
$filename $root."/images/"$_FILES['file']['name'];

                        
imagejpeg($tmp,$filename,100);

                        
imagedestroy($src);
                        
imagedestroy($tmp); 
Tendría que tratar de ver qué tipo de archivo es el que se ha subido no por la extensión, sino por el archivo en sí y, si realmente es jpg, subirlo, sino notificar al usuario.
Alguna sugerencia de cómo hacerlo, por favor?
  #6 (permalink)  
Antiguo 27/06/2013, 18:37
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Imagecreatefromjpeg: imagen negra

Bueno... puedes leer la cabecera de los archivos.......... o sea... lees los primeros bytes y te dijas como empiezan ahi DICE que tipo de archivo ES

Si los abres con un simple editor de textos, veras lo que te digo, los JPG comienzan con algo parecido a esto: "ÿØÿà ... JFIF"


Puedes probar con finfo_file()

http://us.php.net/manual/en/function.finfo-file.php
__________________
Salu2!

Última edición por Italico76; 27/06/2013 a las 18:43

Etiquetas: Ninguno
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 13:20.