Comunidad de diseño web y desarrollo en internet online

escalar imagen, crear miniatura y registrarlas en bd con php

Citar            
MensajeEscrito el 15 Nov 2010 02:46 pm
Hola, tengo este codigo php que con un formulario me guarda unos campos de texto, guarda una imagen, crea su miniatura y registra todo en php. Este Codigo funciona perfecto, lo que me gustaría que me ayudaran es a que la imagen original también la escalase a una medida que yo determine, ya que la sube tal cual es y exede el tamaño del visualizador en flash.

este es el php

Código :

<?php 
error_reporting(E_ALL & ~E_NOTICE);  
//  Iniciamos SQL para indicarle los campos 
    $sql = "INSERT INTO portfolio (portfolio_Image1,portfolio_Imagen1,portfolio_Ref,portfolio_Titulo,portfolio_Link,portfolio_Descripcion) ";  
    $sql .=" VALUES "; 
//  Indicamos el rango de numeros.  
    $random_digit=rand(0000,9999);  
    for($i=0;$i<count($_FILES["fileUpload"]["name"]);$i++)  
    {  
        if(trim($_FILES["fileUpload"]["tmp_name"][$i]) != "")  
        { 
// Indicamos los archivos y la ubicacion para subirlos 
            $images = $_FILES["fileUpload"]["tmp_name"][$i];     
                       
            $new_images = $random_digit."-Thumb-".$_FILES["fileUpload"]["name"][$i];   
            copy($_FILES["fileUpload"]["tmp_name"][$i],"../uploads/".$random_digit.'-'.$_FILES["fileUpload"]["name"][$i]);   
//  Indicamos el tamaño de la miniatura   
            $width=100;    
            $size=GetimageSize($images);   
            $height=75;   
            $images_orig = ImageCreateFromJPEG($images);   
            $photoX = ImagesX($images_orig);   
            $photoY = ImagesY($images_orig);   
            $images_fin = ImageCreateTrueColor($width, $height);   
            ImageCopyResampled($images_fin, $images_orig, 0, 0, 0, 0, $width+1, $height+1, $photoX, $photoY);   
            ImageJPEG($images_fin,"../uploads/".$new_images);   
            ImageDestroy($images_orig);   
            ImageDestroy($images_fin);   
        }  
            $new_images = array( 
            $portfolio_Image1 = $random_digit."-Thumb-".$_FILES["fileUpload"]["name"][0]); 
        }     
//  Concateno actuales valores , para el ej los valores de las imagenes 
        $sql .="( 
    '$portfolio_Image1','".$random_digit.'-'.$_FILES["fileUpload"]["name"][0]."', 
    '".$_POST["portfolio_Ref"]."', 
    '".$_POST["portfolio_Titulo"]."', 
    '".$_POST["portfolio_Link"]."', 
    '".$_POST["portfolio_Descripcion"]."')"; 
//  le agrego coma al grupo de registro y miro si no es el último grupo,  
//  pues si no hago eso el insert dara error pues no debe terminar en coma el query 
        if($i < count($_FILES["fileUpload"]["name"]) - 1) 
          $sql .=",";  
// Incluimos el archivo de conexion a MYSQL.      
 include("conexion.php"); 
// Insertamos el contenido en MYSQL.      
     $objQuery = mysql_query($sql);       
?>


otra cosa es que solo acepta jpge pero si en en form pongo un png por ejemplo no me dice error y la sube pero no le crea la miniatura, como le pongo el verificador de formato.

Por atkdesign

31 de clabLevel



 

diseño web

chrome
Citar            
MensajeEscrito el 15 Nov 2010 04:14 pm
Bien partamos por la segunda parte de tu pregunta...
Si necesitas verificar, obviamente lo tienes que hacer en el codigo de tu archivo ANTES DE SUBIR A LA BASE DE DATOS, no se si sera mas facil verificarlo en el formulario de subida o en el archivo. Yo lo hago en el archivo que procesa la informacion antes de subirla y despues envia por URL una variable de verificacion... algo asi como
FOTO SUBIDA o ARCHIVO NO VALIDO...

tienes que crear un array donde pones lo que tu necesitas subir, en este caso jpg.

//permitidos es un array que contiene la extension que tu le permites subir
$permitidos=array("jpg","jpeg");

//explode es una funcion que te extrae lo que tu quieres con un punto de anclaje o verificador, en este caso esa ancla seria el punto, es decir, extrae del nombre del archivo lo que esta depsues del punto, fijate en php.net/tutorials
$extension1=explode(".",$_FILES['imagen']['name']);

//almacenamos la extension extraiga en otro array. array_pop() extrae y devuelve el último valor del array, acortando el array con un elemento menos. Si el array está vacío (o no es un array), se devolverá NULL. Además se producirá un Warning cuando se llame a un elemento que no es un array.
$extension=array_pop($extension1);

//ahora a la verificacion o comparacion... muy intuitivo

if(in_array($extension,$permitidos)){
if(move_uploaded_file($_FILES['imagen']['tmp_name'],'imagenes/'.$_FILES['imagen']['name'])){
echo "SUBIO";
}else{
echo "ERROR CON LA FUNCION move_uploaded_file";
}

**** in_array — Comprueba si un valor existe en un array. comprueba si el valor de $extension existe en el arreglo $permitidos

}else{
//si encuentra un error en la comparacion del array te lo dice..
echo "Imposible Subir. Extension invalida. Permitidos jpeg, jpg,";

}


Espero que te sirva, perdon por el desorden pero no se como poner el codigo de una mejora manera en este foro....

Por calebzion

51 de clabLevel



Genero:Masculino  

Diseñador Programador Principiante

firefox
Citar            
MensajeEscrito el 15 Nov 2010 04:25 pm
vale gracias, me inclino mas por usar javascript en esta parte de la verificación... me urge mas es la parte inicial de la pregunta; saber si puedo escalar la imagen original antes de subirla ya que la miniatura la crea perfectamente.

Por atkdesign

31 de clabLevel



 

diseño web

chrome
Citar            
MensajeEscrito el 15 Nov 2010 04:33 pm
debes tocar las funciones de imagenes antes de subir y crear un lienzo de modo proporcional tanto a la imagen que estas subiendo como a las medidas que tienes predeterminadas. Yo hago lo siguiente:

if($origenalto>$origenancho){
$ancho=round(($alto*$origenancho)/$origenalto);
}else{
$alto=round(($ancho*$origenalto)/$origenancho);
}

$alto y $ancho son los valores que tu quieras que tenga la imagen, o mas bien el lienzo del espacio que dispones.
$origenancho y $origenalto son los valores ORIGINALES DE TU IMAGEN que las capta el sistema de forma atuomatica como ya tienes en tu codigo arriba
esto te sirve tanto como para crear el thum como para insertar la imagen en el flash de acuerdo a las medidas que tienes.
Espero haberte ayudado y aunque el javascript te ayuda en la verificacion del form, yo me inclino por darle a mi gusto la forma de verificarlo y para eso ocupo php, aunque desconosco una menera de programarlo mediante javascritp, si tienes el codigo podrias compartirlo.
Buena semana

Por calebzion

51 de clabLevel



Genero:Masculino  

Diseñador Programador Principiante

firefox
Citar            
MensajeEscrito el 15 Nov 2010 04:59 pm
Aun no entiendo muy bien, yo puedo en el xml (php) poner el tamaño que yo quiera que se muestre en el flash, pero si la imagen es grande tardara mucho en cargar... no necesito que se visualice a un tamaño x sino que se escale antes de subirse y ser registrada en la bd.

tema aparte - Referente al javascript

Claro en javascript es simple este codigo sube los formatos jpge, jpg, png, gif pero si solo quiero que sea jpge y jpg quito los demas de los formatos permitidos funciona también si agrego otros formatos como pdf o otros pero tienen que estar especificados en el javascript; también comprueba que el campo no esta vació la idea es que el submit sea remplazado por un botón que cargue el script y si es falso envía el mensaje de error pero si es verdadero carga la acción que pongamos en el form.

este es un html

Código :

<html>
<head>
<title>animatk subida de imagenes</title>
<script>
  function GetExtension(Filename) {
    var I = Filename.lastIndexOf(".");
    return (I > -1) ? Filename.substring(I + 1, Filename.length).toLowerCase() : "";
  }

function ValidarImg() {
var form = document.upload;

var Ext = "";

if ( form.file.value == "")
     {
      alert("No haz seleccionado ninguna imagen");
      return false;
     }
if (form.file.value != "") {
     Ext = GetExtension(form.file.value);
      if (Ext != "jpeg" && Ext != "jpg" && Ext != "png" && Ext != "gif")
          {
          alert("El archivo  no es una imagen válida");
          return false;
          }
      else
          {return true; }
      }


}
</script>
</head>

<body>
<form name= "upload" action="" enctype="multipart/form-data" method="post" >
<strong>SUBA IMAGENES</strong><input name="file" type="file" size="12">
<br><input type="button" onClick= "if(ValidarImg()){if(confirm('Desea Subir la imagen')){upload.submit()}}else{}" value="Subir Archivo">
</form>
</body>
</html>

Por atkdesign

31 de clabLevel



 

diseño web

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.