Monday, July 09, 2007

Función para subir Imágenes

Bueno esta función es antigua. La hice hace bastante tiempo, pero les puede ser de utilidad, porque facilita la subida de una imagen JPEG o JPG, a su sitio.

Que hace:
  1. Sube el archivo
  2. Valida si es jpg o jpeg
  3. Si es indicado en los parametros redimensiona la imagen en 2 tamaños

Al final entregaria 3 imagenes: la original, redimensionada 1, redimensionada 2 y retorna el nombre generado para la imagen.

Para poder utilizarla o llamar la imagen seria:

ej:

Supongamos que el nombre generado es "14521458.jpg"

original: 14521458.jpg
redim 1: res14521458.jpg
redim 2: th14521458.jpg

Espero que haya sido claro...

Códigos:

PHP

'<''?'php
/* Subir Foto imagen */
/* Sube una imagen desde el pc al servidor, le cambia la resolucion para la pagina y crea la thumbnail.
El directorio de subida debe estar dentro del raiz
$inpt : nombre del campo de archivo en el form.
$dir : directoruio a subir (debe existir y debe ir asi: dir/)
$aj 0-1 : Indica si haremos resolucion
$ajx : ancho de resolucion
$th 0-1 : Indica si haremos thumnail
$thx : ancho
$thy : alto */
function subir_foto($inpt,$dir,$aj,$ajx,$th,$thx,$thy){
$uploadDir =$DOCUMENT_ROOT.$dir;
$uploadFile = $uploadDir.$_FILES[$inpt]['name'];
if (move_uploaded_file($_FILES[$inpt]['tmp_name'], $uploadFile)){
$secargo=1;
}else{
$secargo=0;
}
chdir($DOCUMENT_ROOT.$dir);
if((strpos($_FILES[$inpt]['name'],"jpg") strpos($_FILES[$inpt]['name'],"jpeg")) (strpos($_FILES[$inpt]['name'],"JPG") strpos($_FILES[$inpt]['name'],"JPEG"))){
$nnew=date("d"."m"."y"."h"."i"."s").".jpg";
rename($_FILES[$inpt]['name'],$nnew);
$img=imagecreatefromjpeg($nnew);
$alto=imagesy($img);$ancho=imagesx($img);
/* Crear imagen ajustada */
if($aj==1){
$anchores=$ancho/$ajx;
$altores=$alto/$anchores;
$res=imagecreatetruecolor($ajx,$altores);
imagecopyresampled($res,$img,0,0,0,0,$ajx,$altores,$ancho,$alto);
imagejpeg($res,"res".$nnew);
}/* Crear imagen ajustada FIN */
/* Crear imagen chica */
if($th==1){
$thumb=imagecreatetruecolor($thx,$thy);
imagecopyresampled($thumb,$img,0,0,0,0,$thx,$thy,$ancho,$alto);
imagejpeg($thumb,"th".$nnew);
}/* Crear imagen chica FIN */
return $nnew;
}
else{
unlink($_FILES[$inpt]['name']);
}
}
'?>'

HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
<html xmlns="http://www.w3.org/1999/xhtml"&gt;
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin título</title>
</head>
<body>
<?
if(strlen($_FILES['flog_f']['name'])){
//agregar foto
$flog_foto=subir_foto("flog_f","uploads/",1,450,1,80,70);
}?
>
<form action="[php]<?= $PHP_SELF?>[/php]" method="post" enctype="multipart/form-data" name="flog_form" id="flog_form">
Foto <strong>SOLO JPEG ó JPG</strong> :<input name="flog_f" type="file" id="flog_f" />
<input name="submit" type="submit" id="submit" value="Enviar" />
</form>
</body>
</html>

Descargar Archivos

9 comments:

Anonymous said...

PARA HTML

mna como lo pongo para ke la envie alagun -email o alguan carpeta..de su server u housting

: www.grafiteroschile.cl/flayer

ke cambios tengo que hacer

Cristian Riffo Huez said...

Si sabes enviar correos del tipo html, solo debes poner la "url completa" de la imagen.

Ejemplo:

'<'img src="http://www.tuweb.cl/update/img.jpg "/'>'

Unknown said...

pero en ke parte del codigo

HTML
lo midifico no cacho mucho :s

esta esla web

www.grafiteroschile.cl

y el korreo seria

graffitis@grafiteroschile.cl

o esta srei al carpeta donde se irian

www.grafiteroschile.cl/public/flayer

Anonymous said...

De todos los códigos que he buscado sobre redimensionar una imagen de un form input y guardarla donde quería (ya redimensionada), este es el mejor código de todos. Te felicido sinceramente. Gracias

Anonymous said...

Muchas gracias! muy bueno.
Lo q si es q se cuelga con imagenes de 2304 x 1708 mas o menos, no sabes d un codigo q pueda redimensionar esatas imagens tan grandes.
desde ya gracias!.

Cristian Riffo Huez said...

Prueba aumentando el uso de memoria en php.ini

Anonymous said...

Me podrias orientar como puedo hacer para subir de a 4 imagenes el código esta muy bueno..

jhonfre said...

la verdad parece interesante el codigo... pero la verdad no tengo ni idea como hacer q funcione en mi blog. Alguien puede explicar, soy muy novato con PHP. Kisiera saber donde y como pongo cada uno de los DOS codigos. Y si tengo que hacerle alguna modificacion especifica. cual es el proceso... gracias, perdon por la ignorancia.

Cristian Riffo Huez said...

Sólo debes incluir el archivo y llamar a la funcion:

include("sube.php");
//agregar foto
$flog_foto=subir_foto("flog_f","uploads/",1,450,1,80,70);

Fíjate en el archivo form.

Aunque sería más conveniente que supieras que motor de blog usas, por ejemplo si es wordpress, hay una infinidad de plugins para imágenes.

Lo otro te recomiendo que estudies más php porque el codigo es muy simple de usar (si saber programar en php).