Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: n3fisto en 17 Julio 2010, 06:46 am



Título: Guardar una imagen y su miniatura
Publicado por: n3fisto en 17 Julio 2010, 06:46 am
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
  1. <?php
  2. // Verificamos que el formulario no ha sido enviado aun
  3. $postback = (isset($_POST["enviar"])) ? true : false;
  4. if($postback){
  5.  // Nivel de errores
  6.  error_reporting(E_ALL);
  7.  // Constantes
  8.  # Altura de el thumbnail en píxeles
  9.  define("ALTURA", 100);
  10.  # Nombre del archivo temporal del thumbnail
  11.  define("NAMETHUMB", "/tmp/thumbtemp"); //Esto en servidores Linux, en Windows podría ser:
  12. // define("NAMETHUMB", "c:/windows/temp/thumbtemp"); y te olvidas de los problemas de permisos
  13.  # Servidor de base de datos
  14.  define("DBHOST", "localhost");
  15.  # nombre de la base de datos
  16.  define("DBNAME", "test");
  17.  # Usuario de base de datos
  18.  define("DBUSER", "root");
  19.  # Password de base de datos
  20.  define("DBPASSWORD", "");
  21.  // Mime types permitidos
  22.  $mimetypes = array("image/jpeg", "image/pjpeg", "image/gif", "image/png");
  23.  // Variables de la foto
  24.  $name = $_FILES["foto"]["name"];
  25.  $type = $_FILES["foto"]["type"];
  26.  $tmp_name = $_FILES["foto"]["tmp_name"];
  27.  $size = $_FILES["foto"]["size"];
  28.  // Verificamos si el archivo es una imagen válida
  29.  if(!in_array($type, $mimetypes))
  30.    die("El archivo que subiste no es una imagen válida");
  31.  // Creando el thumbnail
  32.  switch($type) {
  33.    case $mimetypes[0]:
  34.    case $mimetypes[1]:
  35.      $img = imagecreatefromjpeg($tmp_name);
  36.      break;
  37.    case $mimetypes[2]:
  38.      $img = imagecreatefromgif($tmp_name);
  39.      break;
  40.    case $mimetypes[3]:
  41.      $img = imagecreatefrompng($tmp_name);
  42.      break;
  43.  }
  44.  $datos = getimagesize($tmp_name);
  45.  $ratio = ($datos[1]/ALTURA);
  46.  $ancho = round($datos[0]/$ratio);
  47.  $thumb = imagecreatetruecolor($ancho, ALTURA);
  48.  imagecopyresized($thumb, $img, 0, 0, 0, 0, $ancho, ALTURA, $datos[0], $datos[1]);
  49.  switch($type) {
  50.    case $mimetypes[0]:
  51.    case $mimetypes[1]:
  52.      imagejpeg($thumb, NAMETHUMB);
  53.          break;
  54.    case $mimetypes[2]:
  55.      imagegif($thumb, NAMETHUMB);
  56.      break;
  57.    case $mimetypes[3]:
  58.      imagepng($thumb, NAMETHUMB);
  59.      break;
  60.  }
  61.  // Extrae los contenidos de las fotos
  62.  # contenido de la foto original
  63.  $fp = fopen($tmp_name, "rb");
  64.  $tfoto = fread($fp, filesize($tmp_name));
  65.  $tfoto = addslashes($tfoto);
  66.  fclose($fp);
  67.  # contenido del thumbnail
  68.  $fp = fopen(NAMETHUMB, "rb");
  69.  $tthumb = fread($fp, filesize(NAMETHUMB));
  70.  $tthumb = addslashes($tthumb);
  71.  fclose($fp);
  72.  // Borra archivos temporales si es que existen
  73.  @unlink($tmp_name);
  74.  @unlink(NAMETHUMB);
  75.  // Guardamos todo en la base de datos
  76.  #nombre de la foto
  77.  $nombre = $_POST["nombre"];
  78.  $link = mysql_connect(DBHOST, DBUSER, DBPASSWORD) or die(mysql_error($link));;
  79.  mysql_select_db(DBNAME, $link) or die(mysql_error($link));
  80.  $sql = "INSERT INTO tabla(nombre, foto, thumb, mime)
  81.    VALUES
  82.    ('$nombre', '$tfoto', '$tthumb', '$type')";
  83.  mysql_query($sql, $link) or die(mysql_error($link));
  84.  echo "Fotos guardadas";
  85.  exit();
  86. }
  87. ?>


El Html

Código
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2.        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head>
  5. <title>Imagen a Blob</title>
  6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  7. </head>
  8. <body>
  9. <form name="frmimage" id="frmimage" method="post"
  10.        enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF'];?>">
  11.        Nombre: <input type="text" id="nombre" name="nombre" /><br />
  12.        Imagen: <input type="file" id="foto" name="foto" /><br />
  13.        <input type="submit" name="enviar" id="enviar" value="Guardar" />
  14. </form>
  15. </body>
  16. </html>
  17.  
  18.  
  19. [code=sql]CREATE TABLE `tabla` (
  20.  `idfoto` int(3) NOT NULL AUTO_INCREMENT,
  21.  `nombre` varchar(255) NOT NULL DEFAULT '',
  22.  `foto` blob NOT NULL,
  23.  `thumb` blob NOT NULL,
  24.  `mime` varchar(40) NOT NULL DEFAULT '',
  25.  PRIMARY KEY  (`idfoto`)
  26. ) ;


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]