Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/12/2013, 18:33
ismaelmolinas
 
Fecha de Ingreso: julio-2013
Ubicación: Paraguay
Mensajes: 71
Antigüedad: 10 años, 9 meses
Puntos: 0
Enviar imagenes con php

Bueno gente, aqui publico mi proyecto, el cual pude desarrollar mediante esta web, gracias a la ayuda de todas las personas que se tomaron el tiempo de leer mis preguntas.
Se trata de un script que envia imagenes mediante php, si tienen alguna sugerencia para mejorar el funcionamiento del script por favor haganmelo saber, de momento y a mi vista creo que cumple su funcion basica, pero si gente con mayor experiencia (soy novato ene esto) nota que se puede mejorar, las sugerencias son bienvenidas, sin mas rodeos publico el codigo:

Código PHP:
Ver original
  1. <?php
  2.  
  3. // Verificamos si existen variables a procesar:
  4. if (isset($_POST['correo_electronico'])) {
  5. // Definimos la variable para los mensajes:
  6. $mensaje = array();
  7.  
  8. // Base de datos:
  9. // Definimos la variable y realizamos la conexión con la base de datos:
  10. $conexion = mysql_connect('localhost', 'root', '') or $mensaje[] = ('Error al conectar con la base de datos.');
  11. // Definimos la variable y seleccionamos la base de datos a ser utilizada:
  12. $base_de_datos = mysql_select_db('db', $conexion) or $mensaje[] = ('La base de datos seleccionada no existe.');
  13. // Fin de la base de datos
  14.  
  15. // Correo electrónico:
  16. // Definimos la variable para el correo electrónico:
  17. $correo_electronico = $_POST['correo_electronico'];
  18. // Formato del correo electrónico:
  19. if (!filter_var($_POST['correo_electronico'], FILTER_VALIDATE_EMAIL)) {
  20.       $error = true;
  21.       $mensaje[] = ('Por favor, ingrese una dirección de correo electrónico válida.');
  22.       }
  23. // Fin del correo electrónico
  24.  
  25. // Condiciones:
  26. // Selección de la foto:
  27. if (empty($_FILES['foto']['name'])) {
  28.     $error = true;
  29.     $mensaje[] = ('Por favor, seleccione una foto para enviar.');
  30. }
  31. // Formato de la foto:
  32. if (isset($_FILES['foto']) && strlen($_FILES['foto']['tmp_name']) > 0) {
  33. $formato = getimagesize($_FILES['foto']['tmp_name']);
  34. }
  35. if ($formato['mime'] != 'image/jpeg') {
  36.     $error = true;
  37.     $mensaje[] = ('Sólo se pueden enviar fotos en formato JPG.');
  38. }
  39. // Peso de la foto:
  40. $peso_permitido = 1000000;
  41. if ($_FILES['foto']['size'] > $peso_permitido) {
  42.     $error = true;
  43.     $mensaje[] = ('No puede enviar fotos mayores a ' . ceil($peso_permitido / 1024) . ' MB.');
  44. }
  45. // Fin de las condiciones
  46.  
  47. // País:
  48. // Definimos la variable para el país:
  49. $pais = $_POST['pais'];
  50. // Comprobamos que el país esté seleccionado:
  51. if(empty($_POST['pais'])) {
  52.     $error = true;
  53.     $mensaje[] = ('Por favor, seleccione su país.');
  54. }
  55. // Fin del país
  56.  
  57. // Si se cumplen todas las condiciones continuamos:
  58. if ($error = false) {
  59.  
  60.     // Foto:
  61.     // Definimos las variables para el envío de la foto:
  62.     $directorio = 'fotos';
  63.     $nombre_id = mysql_query("SELECT * FROM fotos WHERE id ORDER BY id DESC LIMIT 1");
  64.     $fila = mysql_fetch_array($nombre_id);
  65.     $id = ceil($fila['id'] + 1);
  66.     $nombre = "foto_" . $id . ".jpg";
  67.     $ruta_temporal = $_FILES['foto']['tmp_name'];
  68.     $ruta_final = $directorio . '/' . $nombre;
  69.     if (!move_uploaded_file($ruta_temporal, $ruta_final)) {
  70.         $error = true;
  71.         $mensaje[] = ('Error al enviar la foto.');
  72.     }
  73.     // Fin de la foto
  74.    
  75.     // Miniatura:
  76.     // Definimos las variables para la creación de la miniatura:
  77.     $directorio_miniatura = "fotos/miniaturas/miniatura_" . $nombre;
  78.     $ancho_miniatura = 150;
  79.     $alto_miniatura = 150;
  80.     // Creamos el lienzo de la miniatura:
  81.     $lienzo_miniatura = imagecreatetruecolor($ancho_miniatura, $alto_miniatura);
  82.     $miniatura = imagecreatefromjpeg($ruta_final);
  83.     // Obtenemos las dimensiones de la foto original:
  84.     $tamano_miniatura = getimagesize($ruta_final);
  85.     $ancho_inicial = $tamano_miniatura[0];
  86.     $alto_inicial = $tamano_miniatura[1];
  87.     // Tomamos el lado más grande de la foto para tener una miniatura cuadrada:
  88.     $lado_miniatura = $ancho_inicial > $alto_inicial ? $alto_inicial : $ancho_inicial;
  89.     // Creamos la miniatura en base a la foto original:
  90.     imagecopyresampled($lienzo_miniatura, $miniatura, 0, 0, 0, 0, $ancho_miniatura, $alto_miniatura, $lado_miniatura, $lado_miniatura);
  91.     // Guardamos la foto en miniatura con una calidad de 100%:
  92.     imagejpeg($lienzo_miniatura, $directorio_miniatura, 100);
  93.     // Fin de la miniatura
  94.    
  95.     // Marca de agua:
  96.     // Definimos las variables para la creación de la marca de agua:
  97.     $ruta_marca_de_agua = 'imagenes/marca-de-agua.png';
  98.     $marca_de_agua = imagecreatefrompng($ruta_marca_de_agua);
  99.     // Procedemos a crear el fichero JPEG final con la marca de agua a partir de la foto inicial:
  100.     $ruta_foto = $directorio . '/' . $nombre;
  101.     $foto_para_marca = imagecreatefromjpeg($ruta_foto);
  102.     // Obtenemos las dimensiones de la foto y de la marca de agua:
  103.     $tamano_foto = getimagesize($ruta_foto);
  104.     $tamano_marca = getimagesize($ruta_marca_de_agua);
  105.     $destino_x = $tamano_foto[0] - $tamano_marca[0] - 10;
  106.     $destino_y = $tamano_foto[1] - $tamano_marca[1] - 10;
  107.     // Pegamos la foto con la marca de agua:
  108.     imagecopymerge($foto_para_marca, $marca_de_agua, $destino_x, $destino_y, 0, 0, $tamano_marca[0], $tamano_marca[1], 100);
  109.     // Guardamos los cambios:
  110.     imagejpeg($foto_para_marca, $ruta_foto);
  111.     // Liberamos la memoria:
  112.     imagedestroy($foto_para_marca);
  113.     imagedestroy($marca_de_agua);
  114.     // Fin de la marca de agua
  115.    
  116.     // Construimos la cadena SQL para guardar los datos:
  117.     $sql = "INSERT INTO fotos (correo_electronico,foto,pais) values('" . $correo_electronico . "','" . $ruta_final . "','" . $pais . "')";
  118.     // Informamos el resultado de la operación:
  119.     $respuesta = mysql_query($sql, $conexion);
  120.     if ($respuesta) {
  121.         $mensaje[] = ('La foto ha sido enviada correctamente, en breve será revisada por un administrador.');
  122.     } else {
  123.         $mensaje[] = ('Error al enviar la foto.');
  124.     }
  125. }
  126.  
  127. }
  128.  
  129. ?>