Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/09/2016, 15:21
luis2791
 
Fecha de Ingreso: marzo-2014
Mensajes: 21
Antigüedad: 10 años, 7 meses
Puntos: 0
Subir imagen y transformar a miniatura mysql

Buenas a todos,

estoy tratando de subir una imagen y que a al vez me guarde el nombre en la base de datos, bueno esto ya lo logre con el siguiente codigo.

Código PHP:
Ver original
  1. if(isset($_POST['btnsave']))
  2.     {
  3.     $pcttitulo_ing =$_GET['pcttitulo'];
  4.    $pcttitulo_ing =$_GET['pcttitulo_ing'];
  5.         $rl_pctid = $_GET['rl_pctid'];
  6.         $dimagen = $_POST['dimagen'];          
  7.         $orden = $_POST['orden'];
  8.        
  9.         $imgFile = $_FILES['g_ruta']['name'];
  10.         $tmp_dir = $_FILES['g_ruta']['tmp_name'];
  11.         $imgSize = $_FILES['g_ruta']['size'];
  12.        
  13.        
  14.         if(empty($rl_pctid)){
  15.             $errMSG = "Error!!! Vaya al inicio de la página.";
  16.         }
  17.  
  18.         else if(empty($dimagen_ing)){
  19.             $errMSG = "Colocar Descripcion breve de la imagen en idioma ingles.";
  20.         }
  21.        
  22.         else if(empty($imgFile)){
  23.             $errMSG = "Favor verifique que haya cargado la imagen.";
  24.         }
  25.         else
  26.         {
  27.             $upload_dir = 'filegalery/'; // Directorio donde se guarda
  28.    
  29.             $imgExt = strtolower(pathinfo($imgFile,PATHINFO_EXTENSION)); // envia la extension de la imagen
  30.        
  31.             // validamos extenciones
  32.             $valid_extensions = array('jpeg', 'jpg', 'png'); // extensiones permitidas
  33.        
  34.             // renombra la imagenes para evitar conflictos
  35.             $uplogo = rand(1000,1000000).".".$imgExt;
  36.                
  37.             // permitir que los formatos de archivo de imagen válidos
  38.             if(in_array($imgExt, $valid_extensions)){          
  39.                 // que el tamaño no exeda los '4MB'
  40.                 if($imgSize < 4000000)              {
  41.                     move_uploaded_file($tmp_dir,$upload_dir.$uplogo);
  42.                 }
  43.                 else{
  44.                     $errMSG = "Disculpe, el archivo exede el peso permitido.";
  45.                 }
  46.             }
  47.             else{
  48.                 $errMSG = "Disculpe, solo arhivos con formato JPG, JPEG Y PNG  son validos.";      
  49.             }
  50.         }
  51.        
  52.         if(!isset($errMSG))
  53.         {
  54.             $stmt = $DB_con->prepare('INSERT INTO gal_img(rl_pctid,g_ruta,dimagen_ing,orden) VALUES(:lrl_pctid, :lg_ruta, :ldimagen_ing, :lorden)');
  55.             $stmt->bindParam(':lrl_pctid',$rl_pctid);
  56.             $stmt->bindParam(':lg_ruta',$uplogo);
  57.             $stmt->bindParam(':ldimagen_ing',$dimagen_ing);
  58.             $stmt->bindParam(':lorden',$orden);
  59.                                                
  60.             if($stmt->execute())
  61.             {
  62.                 $successMSG = "Un Momento ya casi terminamos!!!...";
  63.                 header("refresh:5;index.php"); //
  64.             }
  65.             else
  66.             {
  67.                 $errMSG = "error al insertar....";
  68.             }
  69.         }
  70.     }

El punto esta en que también quiero que la imagen que subo haga una copia y cambie de tamaño, a esto veo que se le llama "thumbnail photo". La mision es que se suba la imagen pero antes de ser seleccionada aparezca una referencia de la misma en miniatura para que no demore por el peso en cargar la pagina principal del website.

Ahora esto es lo que conseguí de otra fuente, pero veo que solo sube JPG y no png u otro tipo de imágenes. También que en ocasiones algunos jpg los sube pero me manda error al crear la miniatura.

Aqui el codigo
Código PHP:
Ver original
  1. $rd=rand();
  2. if(isset($_FILES['files'])){
  3.     $errors= array();
  4.     foreach($_FILES['files']['tmp_name'] as $key => $tmp_name){
  5.         $file_name = $key.$rd.$_FILES['files']['name'][$key];
  6.         $file_size =$_FILES['files']['size'][$key];
  7.         $file_tmp =$_FILES['files']['tmp_name'][$key];
  8.         $file_type=$_FILES['files']['type'][$key]; 
  9.         if($file_size > 2097152){
  10.             $errors[]='File size must be less than 2 MB';
  11.         }      
  12.         $query="INSERT into tbl_images(`id`,`imgname`,`imgtype`,`imgsize`) VALUES('','$file_name','$file_type','$file_size'); ";
  13.         $desired_dir="uploadphotos";
  14.         if(empty($errors)==true){
  15.             if(is_dir($desired_dir)==false){
  16.                 mkdir("$desired_dir", 0700);       
  17.             }
  18.             if(is_dir("$desired_dir/".$file_name)==false){
  19.            
  20.  
  21. $src = imagecreatefromjpeg($tmp_name);
  22.  
  23. list($width,$height)=getimagesize($tmp_name);
  24.  
  25.  
  26. $newwidth=($width/$height)*150;
  27. $newheight=150;
  28. $tmp=imagecreatetruecolor($newwidth,$newheight);
  29.  
  30. imagecopyresampled($tmp,$src,0,0,0,0,$newwidth,$newheight,$width,$height);
  31. $rd=rand();
  32.  
  33. $filename = "thumbphotos/".$file_name;
  34. imagejpeg($tmp,$filename,100);
  35.  
  36.  
  37.                 move_uploaded_file($file_tmp,"$desired_dir/".$file_name);
  38.             }else{                                 
  39.                 $new_dir="$desired_dir/".$file_name.time();
  40.                  rename($file_tmp,$new_dir) ;              
  41.             }
  42.          mysql_query($query);          
  43.         }else{
  44.                 print_r($errors);
  45.         }
  46.     }
  47.     if(empty($error)){
  48.     echo " <div class='alert alert-success'>Listo!<a href='addevent.php'> Otra foto </a></div>";
  49.    
  50.     }
  51. }

A esto por lo que veo que mando error ya que solo permitía jpg, pero sí sube las imagenes en png pero con error y sin crearla en miniatura anexe esto al código.

a esto:
Código PHP:
Ver original
  1. $src = imagecreatefromjpeg($tmp_name);

lo he remplazado por esto:

Código PHP:
Ver original
  1. switch(exif_imagetype($tmp_name)) {
  2.   case IMAGETYPE_JPEG:
  3.     $src = imagecreatefromjpeg($tmp_name);
  4.     break;
  5.   case IMAGETYPE_GIF:
  6.     $src = imagecreatefromgif($tmp_name);
  7.     break;
  8.   case IMAGETYPE_PNG:
  9.     $src = imagecreatefrompng($tmp_name);
  10.     break;
  11.   default:
  12.     die('Imagen no soportada.');
  13. }

Confió mas en el código principal, que es el que estoy trabajado, pero no se como ampliarlo para que cree una imagen miniatura de la que subió en otra carpeta.

Muchas gracias a todos de antemano de tomarse el tiempo de leer y apoyarme.

Saludos!

Última edición por luis2791; 22/09/2016 a las 15:27