Ver Mensaje Individual
  #1 (permalink)  
Antiguo 08/06/2007, 17:58
aebs90
 
Fecha de Ingreso: abril-2007
Mensajes: 14
Antigüedad: 17 años, 1 mes
Puntos: 0
¿Cómo cambiar el tamaño de un jpg en el servidor?

Buenas,

Estoy haciendo una web en la que los usuarios pueden subir fotos automaticamente. Todo funciona de maravilla pero el problema esque si los usuarios suben archivos de un peso mayor a 1 mb será un gran problema para el servidor.

La mayoría de las fotos que suben los usuarios son de esta capacidad y tienen unas dimensiones bastante grandes; ya tengo en mis scripts unas líneas que haran que si la imagen es muy grande se muestre en pantalla con un ancho máximo y un alto relativo al ancho con la función getimagesize y unas cuantas líneas de más.


Pero...
Volviendo a la pregunta, lo que quiero esque cuando el archivo se copie definitivamente al servidor se cambien sus dimensiones y por defecto el peso del archivo.


Mi script, funciona algo así(quitaré algunas líneas personales para no escribir mucho codigo aqui y que se entienda la idea):

-----------------------ARCHIVO QUE CONTIENE EL FORM----------------

<form action="/ACCESO/USERS/listo.php" method="post" enctype="multipart/form-data" name="form1">
<p align="center">Archivo
<input name="archivo" type="file" id="archivo">
</p>
<p align="center"><input name="boton" type="submit" id="boton" value="Enviar"></p>
</form>


------------------ LISTO.PHP-------------------------------

<?php require_once('/user/aebs/procesos/upfotos.php'); ?>
<?php
if($subio) {
echo "El archivo subio con exito";
} else {
echo "El archivo no cumple con las reglas establecidas";
}
die();
?>


----------------------UPFOTOS.PHP-------------------------
<?php
$oldname = $HTTP_POST_FILES['archivo']['name'];
$newname = "test.jpg";
if($boton) {
if (is_uploaded_file($HTTP_POST_FILES['archivo']['tmp_name'])) {
if($HTTP_POST_FILES['archivo']['size'] < 25000000) {
if($HTTP_POST_FILES['archivo']['type']=="image/jpeg"){
copy($HTTP_POST_FILES['archivo']['tmp_name'], $HTTP_POST_FILES['archivo']['name']);
rename( $oldname , $newname);
$subio = true;
}
}
}

}




-----------------------------------------
Como verán,
esto funciona así:
1.-El formulario envía el archivo a listo.php, y el archivo es copiado a una carpeta temporal del servidor
2.-listo.php requiere a upfotos.php (ver paso 3) si upfotos funciona devolverá un mensaje de exito o error.
3.-Upfotos verifica que el archivo tenga la capacidad y el formato adecuado y de ser así lo copia a una carpeta estable del servidor(de no copiarse el archivo temporal es eliminado al dejar de usar el script)

Lo que tengo pensado mas o menos, es agregar alli un if($HTTP_POST_FILES['archivo']['size'] < 10000000)
{
CODIGO QUE AL HACER copy() mi archivo ///$HTTP_POST_FILES['archivo']['name']\\\\\\\\\ Tiene un peso de aprox. 500 kb (suponiendo que la img original tuviera 50,000 x 50,000 px. ahora tenga 25,000 x 25,000 px.)
}


(= Espero no estar pidiendo imposibles, o algo propio de otra tecnología(no php)

:) Muchas gracias... espero alguien me pueda ayudar.


Por cierto, he leido sobre las funciones imagerize y algunas parecidas pero según entiendo estas solo redimensionan el tamaño visto por el usuario. No el tamaño original del archivo, el cual ahora que recuerdo, les agrego los códigos usados para esta función por si a alguien le sirve:

////IMAGE SIZE
if (!$row_FOTOPRINCIPAL['pid'] == NULL){
$tam = getimagesize("/user/aebs/public_html/medblogs/pics/" . $row_FOTOPRINCIPAL['pid']);

$wtamo = $tam[0];

$htamo = $tam[1];

if ($wtamo > '550')
{$wtam = '550';
$htamx = '550' * $htamo;
$htam = $htamx / $wtamo;
}
else
{
$wtam = $wtamo;
$htam = $htamo;
}
}

/////////////////////////////
<img src="url" width="<?php echo $wtam;?>" height="<?php echo $htam; ?>"/>