Foros del Web » Programando para Internet » PHP »

Problema al redimensionar imagenes grandes

Estas en el tema de Problema al redimensionar imagenes grandes en el foro de PHP en Foros del Web. Hola amigos...tengo un raro problema. Uso la siguiente aplicacion para subir mis imágenes al servidor y luego redimensionarlas. He modificado el tamaño máximo que puedo ...
  #1 (permalink)  
Antiguo 23/05/2006, 14:13
 
Fecha de Ingreso: enero-2005
Mensajes: 63
Antigüedad: 12 años, 11 meses
Puntos: 1
Pregunta Problema al redimensionar imagenes grandes

Hola amigos...tengo un raro problema. Uso la siguiente aplicacion para subir mis imágenes al servidor y luego redimensionarlas. He modificado el tamaño máximo que puedo subir al servidor (ya que es de pago) con un .httaccess de la siguiente manera:

Código:
php_value upload_max_filesize 67107840
php_value post_max_size 67107840
Las imágenes las subo con un formulario normal vía POST y las proceso de la siguiente forma:

Código PHP:
        //subimos la imagen_quienes
if ($_POST["nofoto_imagen_quienes"]=="si"){
        echo 
"<center>Sin imagen para página presentación.</center><br>";
}else{
      if (
is_uploaded_file($_FILES['imagen_quienes']['tmp_name'])) {
            
//revisamos que sea jpg
            
if ($_FILES['imagen_quienes']['type'] == "image/gif"||$_FILES['imagen_quienes']['type'] == "image/pjpeg"||$_FILES['imagen_quienes']['type'] == "image/jpeg"){
            
//nuevo nombre para la imagen
               
if ($_FILES['imagen_quienes']['type'] == "image/gif"){
               
$nuevoNombre_quienes $_POST['foto_cambio_imagen_quienes'].".gif";
               }
               if (
$_FILES['imagen_quienes']['type'] == "image/pjpeg"||$_FILES['imagen_quienes']['type'] == "image/jpeg"){
               
$nuevoNombre_quienes $_POST['foto_cambio_imagen_quienes'].".jpg";
               }
            
//movemos la imagen
            
move_uploaded_file($_FILES['imagen_quienes']['tmp_name'], "../../../espacioweb/web".$_POST['maqueta']."/Img/$nuevoNombre_quienes");
            
chmod"../../../espacioweb/web".$_POST['maqueta']."/Img/$nuevoNombre_quienes"0777 );  // octal; valor correcto de mode
            //obtenemos la inforamción
            
$data GetImageSize("../../../espacioweb/web".$_POST['maqueta']."/Img/$nuevoNombre_quienes");
            
//mensaje de éxito
            
echo "<center>Imagen para página presentación subida con éxito.</center><br>";
            if (
$_FILES['imagen_quienes']['type'] == "image/pjpeg"||$_FILES['imagen_quienes']['type'] == "image/jpeg"){
            include (
"../../../includes/redimensionar_imagen_quienes.php");
            }
            if (
$_FILES['imagen_quienes']['type'] == "image/gif"){
            include (
"../../../includes/redimensionar_imagen_quienes_gif.php");
            }
            }else{
            echo 
"<center>Formato no válido para fichero de imagen para página presentación.</center><br>";
            }
            
//borrar fotos cambiadas
            
if ($_POST['actual_imagen_quienes']!="" && $_POST['actual_imagen_quienes']!="fotografia_vacia.jpg"){
             
unlink("../../../espacioweb/web".$_POST['maqueta']."/Img/".$_POST['actual_imagen_quienes']."");
            }
      }else {
      echo 
"<center>No insertada imagen para página presentación.</center><br>";
      }

De esta manera subo las imágenes al servidor y las redimensiono al mismo tiempo. De hecho hasta aqui funciona perfectamente pero el archivo que redimensiona sólo lo hace con imágenes hasta 300K. No lo entiendo.Que yo sepa no hay límite para redimensionar imagenes con la libreria GD. Este es el codigo que redimensiona:
Código PHP:
<?
//imagen original que subo al seridor y nombre de la imagen tras ser redimensionada.
$imagen_original "1148408196-Q.jpg";
$imagen_nueva "1148408196-Q-R.jpg";
//tamaño al que voy a redimensionarla
$imagen_nuevaWidth 280;
$imagen_nuevaHeight 300;


        
$imagetype = array (=> 'GIF'=> 'JPG'=> 'PNG'); 

        
$imginfo getimagesize($imagen_original); 

        if (
$imginfo == null) { 
            
$error "ERROR: La imagen original no se encontro!"
            return 
false
        } 

        
$imginfo[2] = $imagetype[$imginfo[2]]; 

        
// ancho/alto de la imagen original
        
$srcWidth $imginfo[0]; 
        
$srcHeight $imginfo[1]; 

        
// Verifica que existan las funciones GD2 
        
if (!function_exists('imagecreatefromjpeg')) { 
            
$error "la libreria de GD2 de imagenes no esta instalada!"
            return 
false
        } 
        if (!
function_exists('imagecreatetruecolor')) { 
            
$error "No existe la funcion imagecreatetruecolor de la libreria GD2 de imagenes!"
            return 
false
        } 
        if (
$imginfo[2] == 'JPG'
            
$src_img imagecreatefromjpeg($imagen_original); 
        else 
            
$src_img imagecreatefrompng($imagen_original); 
        if (!
$src_img) { 
            
$error "imagen no válida!"
            return 
false
        } 

//Mantengo las proporciones para que la imagen no se deforme
// determina el tamaño de la imagen
$imx = @ImageSX($src_img);
$imy = @ImageSY($src_img);

//determina proporcion en unidades
$x $imx/$imagen_nuevaWidth;
$y $imy/$imagen_nuevaHeight;

// calcula la escala
if($x>$y$scale $imagen_nuevaWidth/$imx;
if(
$x<$y$scale $imagen_nuevaHeight/$imy;
if(
$x==$y$scale $imagen_nuevaHeight/$imy;

//Escala la imagen
$x intval($imx*$scale);
$y intval($imy*$scale);

        
$dst_img imagecreatetruecolor($x$y); 
        
imagecopyresampled($dst_img$src_img0000$x$y$imx$imy); 
        
imagejpeg($dst_img$imagen_nueva"90");//Ojo: el 80 es la calidad de la imagen 

        
imageimagen_nuevaroy($src_img); 
        
imageimagen_nuevaroy($dst_img); 

        
// Se cambian los permisos del archivo 
        
chmod($imagen_nuevaoctdec('777')); 

        
// Se verifica que la imagen es valida 
        
$imginfo getimagesize($imagen_nueva); 
        if (
$imginfo == null) { 
            return 
false
        } else { 
            return 
true
        } 
            
unlink($imagen_original);

?>
Por favor, espero que alguien pueda ayudarme porque necesito poder redimesionar imágenes hasta 5 megas. Por cierto, tengo libreria GD (v. 2.0.28). Gracias....
  #2 (permalink)  
Antiguo 23/05/2006, 14:57
 
Fecha de Ingreso: febrero-2005
Mensajes: 13
Antigüedad: 12 años, 10 meses
Puntos: 0
Verifica en la configuracion de PHP la variable memory_limit, y fijate cuanta memoria utiliza tu script. Yo ya tube problemas con esto.
De paso, si alguien sabe como optimizar el manejo de imagenes para que no consuma tanta memoria, se lo agradezco.

Saludos.
  #3 (permalink)  
Antiguo 24/05/2006, 01:11
 
Fecha de Ingreso: enero-2005
Mensajes: 63
Antigüedad: 12 años, 11 meses
Puntos: 1
Voy a mirarlo ahora mismo

Gracias Nachaos, me acabo de levantar y voy a mirarlo ahora mismo...
  #4 (permalink)  
Antiguo 24/05/2006, 03:41
 
Fecha de Ingreso: enero-2005
Mensajes: 63
Antigüedad: 12 años, 11 meses
Puntos: 1
Solucionado

Pues ya está arreglado...paso a daros la solución para poder redimensionar imágenes grandes. El problema no esta en el upload del archivo-imagen, ya que lo tengo todo arreglado con un .htaccess para poder poner el límite a 50M de la siguiente forma:
Código PHP:
php_value upload_max_filesize 30M
php_value post_max_size 30M 
.
El problema radicaba en que el límite de memoria de uso de php estaba muy bajo para lo que yo necesitaba al ejecutar mi script de redimensionado. Sólo he tenido que añadir la siguiente linea en el .htaccess:
Código PHP:
php_value memory_limit 50M 
Es muy importante que el límite de memoria sea superior al que se ha puesto de subida porque tenemos que tener en cuenta que la memoria no es sólo para esa imagen y su redimensionado, sino también para la carga del resto de paginas, aplicaciones e imágenes de su website.
Y nada más, espero que esto le solucione algún problemilla a alguien.
Un besote a todos
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.
Tema Cerrado

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 13:01.