Guardar una imagen y su miniatura

Iniciado por n3fisto, 17 Julio 2010, 06:46 AM

0 Miembros y 1 Visitante están viendo este tema.

n3fisto

Hola como les va bueno queria mostrarles este Script el cual espero que a alguien le sirva lo use para un proyecto..

Antes de todo se debe de tener instalada la libreria GD,si no la tenemos activada solo tenemos que modificar el archivo php.ini que se encuentra en C:\Windows (puede variar según tu versión de Windows), y agregar la línea extension=php_gd2.dll en la sección "Dynamic Extensions". El archivo php_gd2.dll debe estar en la carpeta "extensions" dentro del directorio donde instalaste el php, por ejemplo "C:\php\extensions".


El formulario de upload y el script php está en una sola página, la nombré como subida.php:
Código (php) [Seleccionar]

<?php
// Verificamos que el formulario no ha sido enviado aun
$postback = (isset($_POST["enviar"])) ? true false;
if(
$postback){
  
// Nivel de errores
  
error_reporting(E_ALL);
  
// Constantes
  # Altura de el thumbnail en píxeles
  
define("ALTURA"100);
  
# Nombre del archivo temporal del thumbnail
  
define("NAMETHUMB""/tmp/thumbtemp"); //Esto en servidores Linux, en Windows podría ser:
// define("NAMETHUMB", "c:/windows/temp/thumbtemp"); y te olvidas de los problemas de permisos
  # Servidor de base de datos
  
define("DBHOST""localhost");
  
# nombre de la base de datos
  
define("DBNAME""test");
  
# Usuario de base de datos
  
define("DBUSER""root");
  
# Password de base de datos
  
define("DBPASSWORD""");
  
// Mime types permitidos
  
$mimetypes = array("image/jpeg""image/pjpeg""image/gif""image/png");
  
// Variables de la foto
  
$name $_FILES["foto"]["name"];
  
$type $_FILES["foto"]["type"];
  
$tmp_name $_FILES["foto"]["tmp_name"];
  
$size $_FILES["foto"]["size"];
  
// Verificamos si el archivo es una imagen válida
  
if(!in_array($type$mimetypes))
    die(
"El archivo que subiste no es una imagen válida");
  
// Creando el thumbnail
  
switch($type) {
    case 
$mimetypes[0]:
    case 
$mimetypes[1]:
      
$img imagecreatefromjpeg($tmp_name);
      break;
    case 
$mimetypes[2]:
      
$img imagecreatefromgif($tmp_name);
      break;
    case 
$mimetypes[3]:
      
$img imagecreatefrompng($tmp_name);
      break;
  }
  
$datos getimagesize($tmp_name);
  
$ratio = ($datos[1]/ALTURA);
  
$ancho round($datos[0]/$ratio);
  
$thumb imagecreatetruecolor($anchoALTURA);
  
imagecopyresized($thumb$img0000$anchoALTURA$datos[0], $datos[1]);
  switch(
$type) {
    case 
$mimetypes[0]:
    case 
$mimetypes[1]:
      
imagejpeg($thumbNAMETHUMB);
          break;
    case 
$mimetypes[2]:
      
imagegif($thumbNAMETHUMB);
      break;
    case 
$mimetypes[3]:
      
imagepng($thumbNAMETHUMB);
      break;
  }
  
// Extrae los contenidos de las fotos
  # contenido de la foto original
  
$fp fopen($tmp_name"rb");
  
$tfoto fread($fpfilesize($tmp_name));
  
$tfoto addslashes($tfoto);
  
fclose($fp);
  
# contenido del thumbnail
  
$fp fopen(NAMETHUMB"rb");
  
$tthumb fread($fpfilesize(NAMETHUMB));
  
$tthumb addslashes($tthumb);
  
fclose($fp);
  
// Borra archivos temporales si es que existen
  
@unlink($tmp_name);
  @
unlink(NAMETHUMB);
  
// Guardamos todo en la base de datos
  #nombre de la foto
  
$nombre $_POST["nombre"];
  
$link mysql_connect(DBHOSTDBUSERDBPASSWORD) or die(mysql_error($link));;
  
mysql_select_db(DBNAME$link) or die(mysql_error($link));
  
$sql "INSERT INTO tabla(nombre, foto, thumb, mime)
    VALUES
    ('
$nombre', '$tfoto', '$tthumb', '$type')";
  
mysql_query($sql$link) or die(mysql_error($link));
  echo 
"Fotos guardadas";
  exit();
}
?>



El Html

Código (php-brief) [Seleccionar]

<!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>
<title>Imagen a Blob</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<form name="frmimage" id="frmimage" method="post"
        enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF'];?>">
        Nombre: <input type="text" id="nombre" name="nombre" /><br />
        Imagen: <input type="file" id="foto" name="foto" /><br />
        <input type="submit" name="enviar" id="enviar" value="Guardar" />
</form>
</body>
</html>


[code=sql]CREATE TABLE `tabla` (
  `idfoto` int(3) NOT NULL AUTO_INCREMENT,
  `nombre` varchar(255) NOT NULL DEFAULT '',
  `foto` blob NOT NULL,
  `thumb` blob NOT NULL,
  `mime` varchar(40) NOT NULL DEFAULT '',
  PRIMARY KEY  (`idfoto`)
) ;



Según el tipo MIME de la imagen, crearemos la miniatura con las funciones imagecreatefromjpeg(), imagecreatefromgif()  o imagecreatefrompng().

La función imagecopyresized() crea la miniatura de la imagen, aunque también podemos utilizar imagecopyresampled().

Espero que  les sirva de algo......
Saludos

[/code]