Foros del Web » Programando para Internet » PHP »

Subir imagen y transformar a miniatura mysql

Estas en el tema de Subir imagen y transformar a miniatura mysql en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 22/09/2016, 15:21
 
Fecha de Ingreso: marzo-2014
Mensajes: 21
Antigüedad: 10 años, 8 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
  #2 (permalink)  
Antiguo 22/09/2016, 16:03
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 14 años, 2 meses
Puntos: 123
Respuesta: Subir imagen y transformar a miniatura mysql

Hace algún tiempo comencé hacer una clase para tal tarea, es funcional aún que se pueden mejorar cosillas, pero por falta de tiempo ahí se ha quedado.

La idea es poder subir múltiples images y redimensionarlas.
Multiupload

Sí tienes dudas de como usarla dímelo y te explico.

También es este hilo deje unas unas funciones para la misma tarea.

Ambas opciones trabajan con imágenes jpg, jpeg y png.
__________________
Unset($vida['malRollo']);
  #3 (permalink)  
Antiguo 23/09/2016, 07:23
 
Fecha de Ingreso: marzo-2014
Mensajes: 21
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: Subir imagen y transformar a miniatura mysql

Pude entrar a los enlaces que me has mencionado y descargar el código,

La opción me parece buena y muy funcional, Lo que me facilitaste es exactamente lo que quiero que haga la aplicacion con las imagens, con la diferencia que esto quede registrado en una base de datos junto con uno o dos campos mas que describan la imagen subida. .
  #4 (permalink)  
Antiguo 23/09/2016, 11:07
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 14 años, 2 meses
Puntos: 123
Respuesta: Subir imagen y transformar a miniatura mysql

Si utilizas la clase el método uploaded() retorna una array multidimensional con los datos de la/las imagen/es subidas, si no recuerdo mal retorna el nombre con el que se ha guardado la imagen, el nombre original, la ruta completa donde se ha guardado la imagen desde el directorio raíz, la ruta completa con el nombre de dominio(url), el tamaño y las url de las redimensiones. Lo megor es que hagas un var_dump al array devuelto para saber exactamente que contiene.

Tienes un ejemplo de uso en git

Pero para que te hagas una idea te pongo el fragmento donde se recuperan las imágenes subidas.

Código PHP:
$arrayImgSubidas $img->uploaded();
$archivos_subidos count($arrayImgSubidas);
if (
$archivos_subidos>0)
{
    foreach (
$arrayImgSubidas as $key => $value
    {
        echo 
$value['name'].'<br/>'// Aquí mostramos el nombre final de la imagen
        
echo '<img src="http://'.$value['url'].'" /><br/>';
    }
}
else
{
    echo 
'No se a subido ningun archivo.';

Una vez que tienes el nombre simplemente es tomar ese valor y guardarlo en la bd, las imágenes Redimensiona das se guardan por defecto con el mismo nombre en un subdirectorio nombrado por el tamaño de las redimensiones.

Por ejemplo supón que subes una imagen y la guardas por defecto en la capeta img y la redimensionas a 200x200 y a 50x50.


Nombre: imagen.jpg
./img/imagen.jpg
./img/50x50/imagen.jpg
./img/200x200/imagen.jpg

Por defecto la clase añade al nombre la fecha de subida date('Y-m-d_H-i-s') a cada imagen esto es para evitar duplicidad e nombres en las imágenes y que estas puedan ser machacadas, además añade un número al final que indica el orden en que fue procesada si se suben varias imagenes a la vez.
__________________
Unset($vida['malRollo']);
  #5 (permalink)  
Antiguo 03/10/2016, 10:22
Avatar de skywolker  
Fecha de Ingreso: julio-2011
Ubicación: España
Mensajes: 195
Antigüedad: 13 años, 4 meses
Puntos: 8
Respuesta: Subir imagen y transformar a miniatura mysql

Hay tiene usted su código image resize cambie el tamaño de su imagen a su gusto y guárdelo en su base de datos mysql


Código PHP:
<?php
function resizeImage($imagePath$width$height$filterType$blur$bestFit$cropZoom) {
    
//The blur factor where &gt; 1 is blurry, &lt; 1 is sharp.
    
$imagick = new Imagick(realpath($imagePath));

    
$imagick->resizeImage($width$height$filterType$blur$bestFit);

    
$cropWidth $imagick->getImageWidth();
    
$cropHeight $imagick->getImageHeight();

    if (
$cropZoom) {
        
$newWidth $cropWidth 2;
        
$newHeight $cropHeight 2;

        
$imagick->cropimage(
            
$newWidth,
            
$newHeight,
            (
$cropWidth $newWidth) / 2,
            (
$cropHeight $newHeight) / 2
        
);

        
$imagick->scaleimage(
            
$imagick->getImageWidth() * 4,
            
$imagick->getImageHeight() * 4
        
);
    }


    
header("Content-Type: image/jpg");
    echo 
$imagick->getImageBlob();
}

?>

Etiquetas: mysql, thumb
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:12.