Comunidad de diseño web y desarrollo en internet online

como reducir tamano de imagenes con php

Citar            
MensajeEscrito el 31 Dic 2008 09:48 pm
tengo este script en php para subir imagenes a mi web, pero lo que quiero es que al subir una imagen la suba de una cierta medida por ejemplo tengo unas fotos que miden 1024 x 768 pero quiero que al subirlas me las reduzca a 600 x 400 como le puedo hacer ya me enfade de reducir cada una en photo shop
gracias de antemano...


Código PHP :


<?php   
$status = "";  
$carpeta="../Amri/";  
if (isset($_POST["enviar"])) {  
    // obtenemos los datos del archivo   
    $tamano = $_FILES["archivo"]['size'];  
    $tipo = $_FILES["archivo"]['type'];  
    $archivo = $_FILES["archivo"]['name'];//nombre fuente  
    $prefijo = substr(md5(uniqid(rand())),0,6);  
      
    $extension = explode(".",$archivo);  
    $num = count($extension)-1;  
    $nombre=basename($archivo,".".$extension[$num]);//nombre base del archivo  
    $imagen=$nombre."_".$prefijo.".".$extension[$num];//nombre real de la imagen  
    if ($archivo != "") {  
        $ext=strtolower($extension[$num]);  
        if($ext=='jpg' or $ext=='png' or $ext=='bmp'){//depende de que deseas que suban....  
            $destino =  $carpeta.$imagen;//lugar donde se almacenara  
            if (copy($_FILES['archivo']['tmp_name'],$destino)){  
                $status = "Archivo subido: <b>".$imagen."</b>";  
            } else {  
                $status = "Error: No se logro subir el archivo";  
            }  
        } else {  
                $status = "Error: Solo se permiten (*.jpg,*.png,*.bmp)";  
        }  
    } else {  
        $status = "Error: Archivo no encontrada para subir al Servidor";  
    }  
}  
?>  

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
<title>:::Subir fotos:::</title> 
<script language="javascript">  
var XMLRequest;      
var XMLRequest2;      
function getHTTPObject() {  
    var xmlhttp;  
    if(window.XMLHttpRequest){  
        xmlhttp = new XMLHttpRequest();  
    }else if (window.ActiveXObject){  
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");  
    }  
    return xmlhttp;  
}  

function elimina(ar,txt){  
    XMLRequest2=getHTTPObject();  
    var url="eliminar.php?ar="+ar;//habre la pagina y elimina el archivo enviado  
    XMLRequest2.open("GET",url,true);  
    XMLRequest2.send(null);  
    self.location = "upload.php?";  
}  
</script>  
<link href="estilo.css" rel="stylesheet" type="text/css" /> 
<style type="text/css"> 
<!-- 
#Layer1 { 
    position:absolute; 
    left:531px; 
    top:89px; 
    width:127px; 
    height:50px; 
    z-index:1; 
} 
#Layer2 { 
    position:absolute; 
    left:281px; 
    top:192px; 
    width:396px; 
    height:62px; 
    z-index:1; 
} 
#Layer3 { 
    position:absolute; 
    left:331px; 
    top:307px; 
    width:70px; 
    height:14px; 
    z-index:2; 
} 
#Layer4 { 
    position:absolute; 
    left:97px; 
    top:49px; 
    width:259px; 
    height:31px; 
    z-index:3; 
} 
#Layer5 { 
    position:absolute; 
    left:165px; 
    top:160px; 
    width:115px; 
    height:16px; 
    z-index:4; 
} 
#Layer6 { 
    position:absolute; 
    left:527px; 
    top:217px; 
    width:361px; 
    height:53px; 
    z-index:5; 
} 
#Layer7 { 
    position:absolute; 
    left:507px; 
    top:295px; 
    width:234px; 
    height:65px; 
    z-index:6; 
} 
#Layer8 { 
    position:absolute; 
    left:516px; 
    top:187px; 
    width:141px; 
    height:52px; 
    z-index:5; 
} 
--> 
</style> 
</head> 
<body background="imagenes/amri.jpg"> 
<div id="Layer5"><a href="../index.php" target="_blank"><strong>Visita la Galeria </strong></a></div> 
<div id="Layer2"> 
  <table width="413" border="0" cellspacing="0" cellpadding="0" align="center">  
  <tr>  
    <td width="413" height="40" class="titulo"><div align="center">Sube Imagenes de Amri y Carlo </div></td>  
  </tr>  
  <tr>  
    <td class="text">Por favor selecciona la imagen a Guardar:</td>  
  </tr>  
  <tr>  
      <td class="text">  
    <form action="index.php" method="post" enctype="multipart/form-data" >  
        <input name="archivo" type="file" class="casilla" id="archivo" size="35" />  
          <input name="enviar" type="submit" class="boton" id="enviar" value="Guardar" />  
    </form>  
    </td>  
  </tr>  
  <tr>  
    <td class="text" style="color:#990000"><?php echo $status; ?></td>  
  </tr>  
  <tr>  
    <td height="30" class="subtitulo">Listado de Imagenes Guardadas </td>  
  </tr>  
  <tr>  
    <td class="infsub"><br />  
    <?php  
    if ($gestor = opendir($carpeta)) {          
        while (false !== ($arch = readdir($gestor))){  
            if ($arch != "." && $arch != "..") {  
                $extension = explode(".",$arch);  
                $num = count($extension)-1;  
                $ext=strtolower($extension[$num]);  
                if($ext=='jpg' or $ext=='png' or $ext=='bmp'){ $archivos[]=$arch; }  
            }  
        }  
        closedir($gestor);  
        // Ordenas tu array:  
        sort($archivos);   
        // (y mueves el puntero interno del array al principio ..)  
        reset($archivos);  
          
        $i=0;  
        echo '<table width="100%" border="0" cellspacing="0" cellpadding="0" align="center">';  
        foreach ($archivos as $arch){  
            $im=getimagesize($carpeta.$arch);  
            $an=$im[0]; $al=$im[1];  
            ($i%2==0)?$color="#CCCCCC":$color="#999999";  
            echo "<tr style='background:$color'><td width='300' align='left'><li><a href=\"../Amri/".$arch."\" class=\"linkli\">".$arch."</a></li>\n";  
            
            echo "<td width='40' align='center'><a href='index.php' onClick='elimina(\"".$arch."\",\"".$txt."\");' class=\"abrir\"><img src='imagenes/eliminar.png' width='20' height='20' title='Eliminar' alt='Eliminar' border='0'/></a></td><td width='20'></td></tr>";  
            $i++;  
        }  
        echo "</table>";  
    }  
    ?>  
    </td>  
  </tr>  
</table> 
</div> 
</body> 
</html> 

Por cher1_7

55 de clabLevel



 

msie7
Citar            
MensajeEscrito el 06 Ene 2009 04:34 pm
Aqui pude resolver tu problema cualquier cosa que no entiendas no dudes en consultarlo. lo eh probado y funciona a la perfeccion

Código :

$status = "";   
$carpeta="../Amri/"; 
  
if (isset($_POST["enviar"])) {   
    
   // obtenemos los datos del archivo
   
   $tamano = $_FILES["archivo"]['size'];          /* Tamaño del archivo en bytes */   
    $tipo = $_FILES["archivo"]['type'];            /* Extencion del archivo */  
    $archivo = $_FILES["archivo"]['name'];         /* Nombre del archivo */     
    $prefijo = substr(md5(uniqid(rand())),0,6);    /* Prefijo aleatorio */ 
   
   $Proporciones_Archivo = getimagesize($_FILES["archivo"]['tmp_name']);  /* Obtencion de las proporciones del archivo */    
   $Ancho = $Proporciones_Archivo[0];                                   /* Proporcion en Ancho */ 
   $Alto = $Proporciones_Archivo[1];                                    /* Proporcion en Alto */ 
   $Temporal_Archivo = $_FILES["archivo"]['tmp_name'];
   
   $extension = explode(".",$archivo);   
    $num = count($extension)-1;    
  
    $nombre = basename($archivo,".".$extension[$num]);     /* Nombre base del archivo */    
    $imagen = $nombre."_".$prefijo.".".$extension[$num];   /* Nombre real de la imagen */   
   
    if ($archivo != "") {   
        $ext = strtolower($extension[$num]);   
        
      if($ext == 'jpg' or $ext == 'png' or $ext == 'bmp'){
            $destino = $carpeta.$imagen;   
            
         if (is_uploaded_file($Temporal_Archivo)){
            move_uploaded_file($Temporal_Archivo, $destino);
            
            $Nueva_Imagen = imagecreatetruecolor(600, 400);     /* Crea una nueva imagen en blanco de 600 x 400 */
            $Origen = imagecreatefromjpeg($destino);            /* Crea una imagen en base de otra imagen */
         
            imagecopyresized($Nueva_Imagen, $Origen, 0, 0, 0, 0, 600, 400, $Ancho, $Alto);      /* Modifica la imagen cargada y la agrega a la imagen en Blanco */

            imagejpeg($Nueva_Imagen, $destino, 15); /* Remplaza la imagen */

            $status = "Archivo subido: <b>".$imagen."</b>";   
            } else {   
                $status = "Error: No se logro subir el archivo";   
            }   
        } else {   
                $status = "Error: Solo se permiten (*.jpg,*.png,*.bmp)";   
        }   
    } else {   
        $status = "Error: Archivo no encontrada para subir al Servidor";   
    }
   
echo $status;
}   



Saludos

Por Zis

Claber

314 de clabLevel

1 tutorial

Genero:Masculino  

Bell Ville - Cordoba - Argentina

firefox
Citar            
MensajeEscrito el 21 Ene 2009 12:55 pm
Hola,

Estoy usando el FIleReference de Flash para subir imagenes. Y mi archivo php usa este code:

Código :

$uploadDir = 'fotos/';
$uoloadFile = $uploadDir . $_FILES['Filedata']['name'];
move_uploaded_file($_FILES['Filedata'][tmp_name], $uploadFile);


Necesitaría aplicar esto de reducir y guarda imagenes en dos carpetas para poder hacer una galería de imagenes en flash. Una tendría las imagenes en chico y la otra en tamaño que se mostrará.

En el codigo que presentaste en la solución qué tendría que reemplazar?
Abrazos, gracias.

Por boratlon

Claber

139 de clabLevel



 

msie7
Citar            
MensajeEscrito el 21 Ene 2009 01:30 pm
Solo tienes que realizar este paso la cantidad de veces, según la cantidad de fotos que necesites modificar y guardar

Código :

$Nueva_Imagen = imagecreatetruecolor(600, 400); 
$Origen = imagecreatefromjpeg($destino); 
         
imagecopyresized($Nueva_Imagen, $Origen, 0, 0, 0, 0, 600, 400, $Ancho, $Alto);

imagejpeg($Nueva_Imagen, $destino, 15);


Solo te resta modificar los valores de dimensiones y el destino y con eso es suficiente.
Espero que te sirva

Saludos :D

Por Zis

Claber

314 de clabLevel

1 tutorial

Genero:Masculino  

Bell Ville - Cordoba - Argentina

firefox
Citar            
MensajeEscrito el 21 Ene 2009 01:49 pm
Hola, gracias por la respuesta... esto lo tengo que sumar a mi php que dejé en el post? porque lo hice y no hace nada... definí $destino = 'mini/'; pero no pasa nada.

Por boratlon

Claber

139 de clabLevel



 

msie7
Citar            
MensajeEscrito el 21 Ene 2009 01:50 pm

boratlon escribió:

Hola, gracias por la respuesta... esto lo tengo que sumar a mi php que dejé en el post? porque lo hice y no hace nada... definí $destino = 'mini/'; pero no pasa nada.

Probé todo el otro código que resolviste anteriormente pero tampoco me funciona, sí si hago la prueba desde un formulario en el php, pero no desde flash.

Gracias, abrazos

Por boratlon

Claber

139 de clabLevel



 

msie7
Citar            
MensajeEscrito el 21 Ene 2009 07:33 pm
boratlon, este es tu codigo ¿Verdad?:

Código :

$uploadDir = 'fotos/';
$uoloadFile = $uploadDir . $_FILES['Filedata']['name'];
move_uploaded_file($_FILES['Filedata'][tmp_name], $uploadFile);


luego de eso deberias crear una variable que contenga el nuevo destino para la foto que necesitas achicar.

Código :

$Nuevo_Folder = 'mini/';

$Nueva_Imagen = imagecreatetruecolor(600, 400); 
$Destino = imagecreatefromjpeg($uoloadFile); 


La funcion imagecreatefromjpeg() creara una nueva imagen en base a la imagen que ya se encuentra en el servidor

Y luego le indicas cuales son las dimencciones que necesitas darle y la guardas en tu nuevo fólder.

Código :

Imagecopyresized($Nueva_Imagen, $Destino, 0, 0, 0, 0, 600, 400, $Ancho, $Alto);

imagejpeg($Nueva_Imagen, $Nuevo_Folder, 75);



El código completo seria algo así:

Código :

$uploadDir = 'fotos/';
$uoloadFile = $uploadDir . $_FILES['Filedata']['name'];
move_uploaded_file($_FILES['Filedata'][tmp_name], $uploadFile);

$Origen_Imagen = $uoloadFile; 
$Nuevo_Folder = 'mini/';

$Nueva_Imagen = imagecreatetruecolor(600, 400); 
$Destino = imagecreatefromjpeg($Origen_Imagen); 
         
imagecopyresized($Nueva_Imagen, $Destino, 0, 0, 0, 0, 600, 400, $Ancho, $Alto);

imagejpeg($Nueva_Imagen, $Nuevo_Folder, 75);


No eh probado el funcionamiento de este código por lo que puede surgir algún error pero la sintaxis que debes seguir es esta, de todas formas lo que hace a un buen programador no es el copy and paste ¿no? jeje :lol:


Una pequeña aclaración, el numero que se encuentra al final de los valores dentro la función imagejpeg(); (75) es la calidad final que tendrá la imagen JPG y va desde 0 a 100

Saludos

Por Zis

Claber

314 de clabLevel

1 tutorial

Genero:Masculino  

Bell Ville - Cordoba - Argentina

firefox
Citar            
MensajeEscrito el 23 Ene 2009 02:43 am
le encuentro la lógica y no veo problema de la sintaxis... apenas soy un amateur en esto, así que tampoco puedo decir con seguridad... pero no me funciona :( igualmente gracias... seguiré probando, no sé por qué si lo mando desde un formulario html funciona y desde flash no...

en fin... cha gracias... abrazos!

Por boratlon

Claber

139 de clabLevel



 

msie7
Citar            
MensajeEscrito el 23 Ene 2009 01:17 pm
si desde HTML funciona es que entonces todo marcha bien, el problema seguro se encuentra en la comunicación que establece FLASH con PHP, las funciones del código PHP necesitas si o si trabajar con un archivo al no recibir datos de alguno simplemente no hacen nada o bien devuelven error, es muy posible que FLASH solo este pasando variables y no multipartes de un archivo. te recomiendo que preguntes en la sección Actiosncript seguro que ahí consigues la solución

Saludos :wink:

Por Zis

Claber

314 de clabLevel

1 tutorial

Genero:Masculino  

Bell Ville - Cordoba - Argentina

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.