Foros del Web » Programando para Internet » PHP »

problema al subir archivo, un ejemplo funcionando para ver el problema

Estas en el tema de problema al subir archivo, un ejemplo funcionando para ver el problema en el foro de PHP en Foros del Web. hola que tal , estoy desarrollando un sistema el cual me permite obtener una imagen subida por un usuario ... esta imagen luego es trasladada ...
  #1 (permalink)  
Antiguo 13/11/2009, 14:13
Avatar de mauro770  
Fecha de Ingreso: mayo-2009
Mensajes: 109
Antigüedad: 15 años, 6 meses
Puntos: 1
Exclamación problema al subir archivo, un ejemplo funcionando para ver el problema

hola que tal , estoy desarrollando un sistema el cual me permite obtener una imagen subida por un usuario ... esta imagen luego es trasladada a una carpeta y una ves alli la redimenciono a una medida especificada anteriormente y la traslado a otra carpeta.
el problema que se me presenta es uno solo, lo explico ...
Supongamos que dejo las medidas predeterminadas en ancho: 310 alto: 250 y subo una imagen de 300 x 300 , el script se ejecuta normalmente , guarda la imagen todo , pero al modificar ancho y alto de la imagen a 310 x 250 es como si a la altuna le cortase un pedazo de la imagen para poder rediemncionarla. Espero haberme explicado , como ya se q no se me entendio mucho por que no me se explicar dejo
LA PAGINA FUNCIONANDO: http://www.minicio.com.ar/subir_fotos.php / CONTIENE EL EJEMPLO Y LA IMAGEN QUE UTILIZO PARA LA PRUEBA.

al parecer este problema solo sucede con el alto ( espero q este dato ayude)

Les agradeceria mucho q me ayuden , vengo 3 dias intentando en mi casa arreglarlo :S y no doy con la solucion
aca dejo el codigo:
Código PHP:
<?php
         $dirbase 
'Directorio web interno';
         if (
$HTTP_POST_FILES['MINIATURA']['name'] != '') {
            
$nombre_archivo $HTTP_POST_FILES['MINIATURA']['name'];
            
$tipo_archivo $HTTP_POST_FILES['MINIATURA']['type'];
            
$tamano_archivo $HTTP_POST_FILES['MINIATURA']['size'];
            
$archivo pathinfo($nombre_archivo);
            
$archivo $archivo['filename'];
            
//compruebo si las características del archivo son las que deseo
            
$url_mini_no_valida '';
            
$sw '';
            if (
strpos($tipo_archivo"jpg")) $sw $tipo_archivo;
            if (
strpos($tipo_archivo"jpeg")) $sw $tipo_archivo;
            if (
strpos($tipo_archivo"png")) $sw $tipo_archivo;
            if (
strpos($tipo_archivo"gif")) $sw $tipo_archivo;
            if (
$sw == '') {
               
$msj 'Extensión de archivo no válida: '.$tipo_archivo;
               echo 
'<script> alert("Tipo de archivo no soportado: '.$msj.'"); </script>';         
               
$tpl->assign($data);
               
//$tpl->assign('ruta_miniatura', 'http://localhost/phpld22/miniaturas/');
               
$content $tpl->fetch('admin/dir_links_edit.tpl');
               
$tpl->assign('content'$content);
               
//Clean whitespace
               
$tpl->load_filter('output''trimwhitespace');
               
//Make output
               
echo $tpl->fetch('admin/main.tpl');   
               die();
            } else {
               if (
move_uploaded_file($HTTP_POST_FILES['MINIATURA']['tmp_name'], $dirbase.'temp/'.$nombre_archivo)) {
                  if (
file_exists($dirbase.'miniaturas/_'.$archivo.'.jpg')) {
                     if (!
unlink($dirbase.'miniaturas/_'.$archivo.'.jpg')) {
                        echo 
"fallo al borrar miniatura anterior";
                        die();
                     }
                  }
                  
escalar($dirbase.'temp/'.$nombre_archivo310250);
                  if (!
unlink($dirbase.'temp/'.$nombre_archivo)) {
                     echo 
"fallo al borrar imagen original temporal";
                     die();
                  }
                  
rename ($dirbase.'temp/_'.$archivo.'.jpg'$dirbase.'miniaturas/_'.$archivo.'.jpg');
                  
$data['MINIATURA'] = '_'.$archivo.'.jpg';
               } else {
                  echo 
"Ocurrió algún error al subir el fichero. No pudo guardarse.";
               }
            }
         }   

function 
escalar($imagen,$ancho,$altura) {
   
$prefijo_thumb "_";
   
$camino_nombre=explode("/",$imagen);
   
$nombre=end($camino_nombre);
   
$camino=substr($imagen,0,strlen($imagen)-strlen($nombre));
   
$archivo pathinfo($imagen);
   
$extension $archivo['extension'];
   
$nombre_archivo $archivo['filename'];
   
   if (!
file_exists($camino.$prefijo_thumb.$nombre)) {
      if ((
$extension == 'jpeg') || ($extension == 'jpg')) {
         
$img = @imagecreatefromjpeg($camino.$nombre);
      } elseif (
$extension == 'png') {
         
$img = @imagecreatefrompng($camino.$nombre);
      } elseif (
$extension == 'gif') {
         
$img = @imagecreatefromgif($camino.$nombre);
      }
       if (!
$img) { /* Comprobar si ha fallado */
      
         
$img = @imagecreatefromjpeg("imagenes/img1.jpg");   
         
$datos getimagesize("imagenes/img1.jpg") or die("Problemas con $camino$nombre<br>");
         
$anchura $ancho;
         
$thumb imagecreatetruecolor($anchura,$altura);
         
imagecopyresampled ($thumb$img0000$anchura$altura$datos[0], $datos[1]); // calidad
         //imagecopyresized ($thumb, $img, 0, 0, 0, 0, $anchura, $altura, $datos[0], $datos[1]); // rapidez
         
imagejpeg($thumb,$camino.$prefijo_thumb.$nombre);
         
       } else {   
         
$datos getimagesize($camino.$nombre) or die("Problemas con $camino$nombre<br>");
         
$ratio = ($datos[0] / $ancho);
         
$ancho_final $ancho;
         
$alto_final round($datos[1] / $ratio);
         
$escalada imagecreatetruecolor($ancho_final,$alto_final);
         
imagecopyresampled ($escalada$img0000$ancho_final$alto_final$datos[0], $datos[1]); // calidad
         //imagecopyresized ($thumb, $img, 0, 0, 0, 0, $anchura, $altura, $datos[0], $datos[1]); // rapidez
         
         
$thumb imagecreatetruecolor($ancho,$altura);
         
imagecopyresampled ($thumb$escalada0000$ancho$altura$ancho$altura); // calidad
$_POST['asd'] = 'http://www.minicio.com.ar/miniaturas/'.$prefijo_thumb.$nombre_archivo.'.jpg';
         
imagejpeg($thumb,$camino.$prefijo_thumb.$nombre_archivo.'.jpg');
      }
   }
}

>

<!
DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<
title>Documento sin t&iacute;tulo</title>
</
head>

<
body>

<
form id="form1" name="form1" enctype="multipart/form-data" method="post" action="">
  <
label>
  <
input type="file" name="MINIATURA" id="MINIATURA" />
  </
label>
  <
p>
    <
label>
    <
input type="submit" name="enviar" id="enviar" value="Enviar" /> Porfavor para realizar la primera prueba descarga la "Imagen Original".
    </
label>
  </
p>
</
form>
<
table width="675" height="312" border="1">
  <
tr>
    <
td width="329" height="33">Imagen Originalmedias 300 x 300</td>
    <
td width="330">Imagen Dimencionadamedias 310 x 250</td>
  </
tr>
  <
tr>
    <
td height="228"><img src="http://www.minicio.com.ar/prueba.jpg" /></td>
    <
td><img src="<?php echo $_POST['asd']; ?>"/></td>
  </
tr>
</
table>
</
body>
</
html>
muchas gracias dede ya



perdon , con imagenes mas chicas que 310 x 250tambien pasa lo mismo ....

Última edición por mauro770; 13/11/2009 a las 15:13
  #2 (permalink)  
Antiguo 16/11/2009, 10:19
serser
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: problema al subir archivo, un ejemplo funcionando para ver el problema

Hola mauro770.

Las imágenes redimensionadas deberían tener la misma proporción de aspecto que sus originales. Estás forzando a las imágenes redimensionadas a tener todas el mismo ancho con su respectiva altura escalada, y esto no es lo que ocurre siempre.

Tienes que tener en cuenta dos variables:
- La proporción entre el ancho de la imagen original y el ancho de la imagen redimensionada a crear. Lo llamaremos $ratio_ancho.
- La proporción entre el alto de la imagen original y el alto de la imagen redimensionada a crear. Lo llamaremos $ratio_alto.

Hay tres posibilidades:

1ª) Que el valor de $ratio_ancho esté más próximo a 1 que el valor de $ratio_alto (o que el $ratio_ancho sea 1 y el $ratio_alto otro valor distinto).

2ª) Que el valor de $ratio_alto esté más próximo a 1 que el valor de $ratio_ancho (o que el $ratio_alto sea 1 y el $ratio_ancho otro valor distinto).

3ª) Que los valores de $ratio_ancho y $ratio_alto sean iguales.

Tú sólo has tenido en cuenta la 1ª posibilidad.


Otro error que has cometido es que a la imagen de salida le estás dando las dimensiones de $thumb mientras que deberías darle las de la imagen $escalada.


NOTA: Deberías tener en cuenta una 4ª posibilidad y es que ambas dimensiones de la imagen original sean menores que ambas dimensiones de la imagen redimensionada a crear. En este caso estarías aumentado la imagen con la posible pérdida de calidad.

Última edición por serser; 16/11/2009 a las 10:27
  #3 (permalink)  
Antiguo 17/11/2009, 14:55
Avatar de mauro770  
Fecha de Ingreso: mayo-2009
Mensajes: 109
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: problema al subir archivo, un ejemplo funcionando para ver el problema

gracias serser , me ayudaste mucho en la busqueda de la solucion.
saludos
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:28.