Foros del Web » Programando para Internet » PHP »

Subiendo imágenes y redimencionando las mismas - todo bien pero tengo un problemita

Estas en el tema de Subiendo imágenes y redimencionando las mismas - todo bien pero tengo un problemita en el foro de PHP en Foros del Web. Hola a todos. Resulta que en un sistema de manejo de contenidos que realicé para X portal, se requería que el usuario pudiera subir una ...
  #1 (permalink)  
Antiguo 26/07/2008, 12:34
Avatar de alexbariv  
Fecha de Ingreso: septiembre-2003
Ubicación: Mérida, Venezuela
Mensajes: 766
Antigüedad: 16 años, 2 meses
Puntos: 0
Pregunta Subiendo imágenes y redimencionando las mismas - todo bien pero tengo un problemita

Hola a todos.

Resulta que en un sistema de manejo de contenidos que realicé para X portal, se requería que el usuario pudiera subir una imagen y en base a esta deberían crearse 3 imágenes adicionales, una para miniatura, una de tamaño medio y una grande.

Para esto hice este código PHP que funciono bien por un tiempo:

Código PHP:

if( is_uploaded_file($_FILES['afiche']['tmp_name'])  ) {

    
// Comienza la generación de la nueva imágen
    
$rand        rand(1,100000);
    
$extension pathinfo($_FILES['afiche']['name']);
    
$extension $extension[extension];
    
$mimes     explode(","$extension);
    
$nombre      "{$rand}.$extension";
    
$afiche      $nombre;


    
// Creando Miniatura ***
    // Obtener Archivo
    
$src       imagecreatefromjpeg($_FILES['afiche']['tmp_name']);
    
// Obtener Resolución
    
list($width,$height) = getimagesize($_FILES['afiche']['tmp_name']);
    
// Nueva Resolución a a aplicar
    
$newwidth  150;
    
$newheight = ($height/$width)*150;
    
// Crear nueva imágen
    
$tmp       imagecreatetruecolor($newwidth,$newheight);
    
imagecopyresampled($tmp,$src,0,0,0,0,$newwidth,$newheight,$width,$height);
    
$filename  "{$uploaddir}/thumb/{$nombre}";
    
imagejpeg($tmp,$filename,100);
    
// Destruir imágenes creadas
    
imagedestroy($src);
    
imagedestroy($tmp);


    
// Ajustando imágen mediana ***
    // Obtener Archivo
    
$src       imagecreatefromjpeg($_FILES['afiche']['tmp_name']);
    
// Obtener Resolución
    
list($width,$height) = getimagesize($_FILES['afiche']['tmp_name']);
    
// Nueva Resolución a a aplicar
    
$newwidth  400;
    
$newheight = ($height/$width)*400;
    
// Crear nueva imágen
    
$tmp       imagecreatetruecolor($newwidth,$newheight);
    
imagecopyresampled($tmp,$src,0,0,0,0,$newwidth,$newheight,$width,$height);
    
$filename  "{$uploaddir}/med/{$nombre}";
    
imagejpeg($tmp,$filename,100);
    
// Destruir imágenes creadas
    
imagedestroy($src);
    
imagedestroy($tmp);


    
// Ajustando imágen grande ***
    // Obtener Archivo
    
$src       imagecreatefromjpeg($_FILES['afiche']['tmp_name']);
    
// Obtener Resolución
    
list($width,$height) = getimagesize($_FILES['afiche']['tmp_name']);
    
// Nueva Resolución a a aplicar
    
$newwidth  700;
    
$newheight = ($height/$width)*700;
    
// Crear nueva imágen
    
$tmp       imagecreatetruecolor($newwidth,$newheight);                /**<<**/
    
imagecopyresampled($tmp,$src,0,0,0,0,$newwidth,$newheight,$width,$height);
    
$filename  "{$uploaddir}/full/{$nombre}";
    
imagejpeg($tmp,$filename,100);
    
// Destruir imágenes creadas
    
imagedestroy($src);
    
imagedestroy($tmp);

Recientemente ha comenzado a aparecer este error:


Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 2800 bytes) in /home/XXX/public_html/cms/eventos_mod.php on line 150


Marqué la línea 150 en el código anterior con "/**<<**/".

Quisiera saber que me sugieren para mejorar el rendimiento de este script o cómo puedo evitar este error. Realmente no tengo ni la más mínima idea de porque pasa esto, ya que de forma local funciona bien, y este error comenzó a aparecer recientemente.

Gracias de antemano y un saludo.
__________________
"Piensa como una persona de acción y actúa como una persona que piensa."
  #2 (permalink)  
Antiguo 27/07/2008, 01:02
Avatar de Gerifaltus  
Fecha de Ingreso: junio-2005
Ubicación: Tabasco, México
Mensajes: 180
Antigüedad: 14 años, 5 meses
Puntos: 4
Respuesta: Subiendo imágenes y redimencionando las mismas - todo bien pero tengo un p

Cita:
Iniciado por AleXerTecH Ver Mensaje
imagejpeg($tmp,$filename,100);
Prueba a cambiar el valor de 100 por 80, pero también debes tener en cuenta que tan necesario es para ti tener un jpg con la calidad máxima (100), si no es muy necesario podrias bajar la calidad de 100 a 80 en el caso de las imágenes pequeñas.

Podrías plantearte también, que tan necesario es realizar dos copias de esa imagen, podrías redimensionarlas cuando las muestres en la web, y de esta manera solo tienes una imágen en el server. Esa es mi opinón.

Saludos.
__________________
:::.. Todo tiene un ¿Por qué? y un ¿Para qué? ..:::
:::.. Todo se reduce a un SI y a un No ..:::
  #3 (permalink)  
Antiguo 27/07/2008, 01:26
 
Fecha de Ingreso: mayo-2006
Mensajes: 288
Antigüedad: 13 años, 6 meses
Puntos: 4
Respuesta: Subiendo imágenes y redimencionando las mismas - todo bien pero tengo un p

Umm mas parce un error de memoria pues parece que estas llenando con demasiados bits tu memoria, espero estar equivocado :(
  #4 (permalink)  
Antiguo 27/07/2008, 13:13
 
Fecha de Ingreso: abril-2006
Mensajes: 1.128
Antigüedad: 13 años, 8 meses
Puntos: 33
Respuesta: Subiendo imágenes y redimencionando las mismas - todo bien pero tengo un p

AleXerTecH:
Creo que te recomendaria que hagas lo siguiente ->
1.- que seppares la funcion de subir de la funcion de redimensionar o de crear tres archivos diferentes.
Esto lo puedes hacer creando un archivo php para la subida y una vez terminada la subida con exito, un continuar enviaria a hacer el siguiente trabajo de redimensionar o crear las imagenes que tu requieres.
2.- En la subida y una vez que se ha tenido exito con la subida, puedes
determinar el filesize() de cada archivo subido y establecer un limite maximo conforme lo que te muestra el error 8.4Mb y haces algo asi ->
$uno = filesize($archivouno);
$dos = filesize($archivodos);
$tres = filesize($archivotres);
$cuatro = $uno + $dos + $tres;
if($cuatro > "8000000") {
Rechazas la subida y podrias hacer un unlink de todos los archivos.
}
De esta manera se evitaria toda posibilidad de error.
Saludos
Y espero te ayude
Franco
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.