Micro Tutorial Tratamiento de imagenes en Php

Iniciado por n3fisto, 27 Noviembre 2009, 15:55 PM

0 Miembros y 1 Visitante están viendo este tema.

n3fisto

Hola bueno miren queria darles essta ayuda a todos los que trabajan con imagenes le di el nombre de microTutorial por que es mi primero y si tienes fallas me avisas porfavor soy principiante:

NOTA: La informacion la saque de toda parte asi que es un codigo Mixtura (Me refiero que ES CODIGO sacado de varios source)

TRATAMIENTO DE LA IMAGEN
Primero tenemos que aprender a tratar a la imagen con esta pagina lo que hacemos es redimensionar el tamaño y ajustarlo.

Nombre de la pagina img.inc.php

Código (php) [Seleccionar]
<?php
//TRATAMIENTO DE IMAGENES
//====================================

 
class somaImagen{
 var 
$imagen_recurso; var $imagen_salida;
 var 
$imagen_recurso_ancho; var $imagen_salida_ancho;
 var 
$imagen_recurso_alto; var $imagen_salida_alto;
 var 
$imagen_recurso_desde_x 0; var $imagen_salida_desde_x 0;
 var 
$imagen_recurso_desde_y 0; var $imagen_salida_desde_y 0;
 var 
$escala; var $imagen_imprimible;
 var 
$rango_menor 1;
 var 
$rango_mayor 1000;
 
 function 
validarMedida($valor){
 if (
$valor>=($this->rango_menor) and $valor<$this->rango_mayor){
 return 
$valor;
 }else{
 if(
$valor <= ($this->rango_menor-1) ){return ($this->rango_menor); }
 if(
$valor>= $this->rango_mayor ){return $this->rango_mayor ; }
 }
 } 
 
 function 
crearImagen($imagen){
 
$this->imagen_recurso $imagen;
 
$this->imagen_salida imagecreatefromjpeg($this->imagen_recurso);
 
$this->imagen_recurso_ancho imagesx($this->imagen_salida);
 
$this->imagen_recurso_alto imagesy($this->imagen_salida);
 }
 
 
 function 
crearSalida($ancho,$alto){
 
$this->imagen_salida_ancho $ancho;
 
$this->imagen_salida_alto $alto;
 
$this->imagen_imprimible imagecreatetruecolor($this->imagen_salida_ancho,$this->imagen_salida_alto);
 
imagecopyresampled(
 
$this->imagen_imprimible,
 
$this->imagen_salida,
 
$this->imagen_recurso_desde_x,
 
$this->imagen_recurso_desde_y,
 
$this->imagen_salida_desde_x,
 
$this->imagen_salida_desde_y,
 
$this->imagen_salida_ancho,
 
$this->imagen_salida_alto,
 
$this->imagen_recurso_ancho,
 
$this->imagen_recurso_alto
 
);
 
imagejpeg($this->imagen_imprimibleNULL,100);
 
imagedestroy($this->imagen_imprimible);
 }
 
 function 
Cuadro($lados,$imagen){
 
$lados=$this->validarMedida($lados);
 
$this->crearImagen($imagen);
 if ( 
$this->imagen_recurso_ancho>= $this->imagen_recurso_alto )
 {
$this->escala=$lados/$this->imagen_recurso_ancho;}
            else
 {
$this->escala=$lados/$this->imagen_recurso_alto;}
 
$this->crearSalida($this->imagen_recurso_ancho $this->escala $this->imagen_recurso_alto $this->escala);
 } 
 
 function 
AnchoMax($ancho,$imagen){
 
$ancho=$this->validarMedida($ancho);
 
$this->crearImagen($imagen);
 
$this->escala=$ancho/$this->imagen_recurso_ancho;
 
$this->crearSalida($this->imagen_recurso_ancho $this->escala $this->imagen_recurso_alto $this->escala);
 }
 
 
 function 
AltoMax($alto,$imagen){
 
$alto=$this->validarMedida($alto);
 
$this->crearImagen($imagen);
 
$this->escala=$alto/$this->imagen_recurso_alto;
 
$this->crearSalida($this->imagen_recurso_ancho $this->escala $this->imagen_recurso_alto $this->escala);
 }
 
 function 
Encuadrar($medida,$imagen,$alineacion){
 
$medida=$this->validarMedida($medida);
 
$this->crearImagen($imagen);
 if ( 
$this->imagen_recurso_ancho <= $this->imagen_recurso_alto ){
 
$this->escala $this->imagen_salida_ancho/$this->imagen_recurso_ancho;
 if(
$alineacion!=0){
 if(
$alineacion==1){
 
$this->imagen_salida_desde_y=($this->imagen_recurso_alto-$this->imagen_recurso_ancho);
 }
 if(
$alineacion==2){
 
$this->imagen_salida_desde_y=($this->imagen_recurso_alto-$this->imagen_recurso_ancho)/2;
 }
 }
 
$this->imagen_recurso_alto $this->imagen_recurso_ancho;
 }else {
 
$this->escala $this->imagen_salida_alto/$this->imagen_recurso_alto;
 if(
$alineacion!=0){
 if(
$alineacion==1){
 
$this->imagen_salida_desde_x=($this->imagen_recurso_ancho-$this->imagen_recurso_alto);
 }
 if(
$alineacion==2){
 
$this->imagen_salida_desde_x=($this->imagen_recurso_ancho-$this->imagen_recurso_alto)/2;
 }
 }
 
$this->imagen_recurso_ancho $this->imagen_recurso_alto;
 }
 
$this->crearSalida($medida,$medida);
 }
 }
 
?>



n3fisto

Continuando........

Luego de realizar ese tratamiento lo que sigue es la carga a la base de datos, y la redimension de la imagen, lo que yo pude hacer, fue que en una sola pagina me cree un temporal mas la subida a la base de datos.

Subir imagen a la Base de Datos

Lo siguiente que se hace es crear la pagina que se encarga de la subida, como yo soy Linuxero pude hacer que se suba el servidor de la misma manera la imagen aver que les parece

Código (php) [Seleccionar]
<?php
  
// Constantes
  # Altura de el thumbnail en píxeles
  
define("ALTURA"100);
  
# Nombre del archivo temporal del thumbnail
  //define("NAMETHUMB", "/tmp/thumbtemp"); //Esto en servidores Linux, en Windows podría ser:
define("NAMETHUMB""D:/windows/temp/thumbtemp"); // y te olvidas de los problemas de permisos   Bueno lo de D: es por que en mi portatil esta el sistema
  # Servidor de base de datos
  
define("DBHOST""localhost");
  
# nombre de la base de datos
  
define("DBNAME""productos");
  
# Usuario de base de datos
  
define("DBUSER""root");
  
# Password de base de datos
  
define("DBPASSWORD""delirion");
  
// Mime types permitidos
  
$mimetypes = array("image/jpeg""image/pjpeg""image/gif""image/png");
  
// Variables de la foto
  
$name $_FILES['form_foto']['name'];
  
$type $_FILES['form_foto']['type'];
  
$tmp_name $_FILES['form_foto']['tmp_name'];
  
$size $_FILES['form_foto']['size'];
  
// Verificamos si el archivo es una imagen válida
  
if(!in_array($type$mimetypes))
    die(
"El archivo que subiste no es una imagen válida");
  
// Creando el thumbnail
  
switch($type) {
    case 
$mimetypes[0]:
    case 
$mimetypes[1]:
      
$img imagecreatefromjpeg($tmp_name);
      break;
    case 
$mimetypes[2]:
      
$img imagecreatefromgif($tmp_name);
      break;
    case 
$mimetypes[3]:
      
$img imagecreatefrompng($tmp_name);
      break;
  }
  
  
$datos getimagesize($tmp_name);
  
$ratio = ($datos[1]/ALTURA);
  
$ancho round($datos[0]/$ratio);
  
$thumb imagecreatetruecolor($anchoALTURA);
  
imagecopyresized($thumb$img0000$anchoALTURA$datos[0], $datos[1]);
  switch(
$type) {
    case 
$mimetypes[0]:
    case 
$mimetypes[1]:
      
imagejpeg($thumbNAMETHUMB);
  break;
    case 
$mimetypes[2]:
      
imagegif($thumbNAMETHUMB);
      break;
    case 
$mimetypes[3]:
      
imagepng($thumbNAMETHUMB);
      break;
  }
  
// Extrae los contenidos de las fotos
  # contenido de la foto original
  
$fp fopen($tmp_name"rb");
  
$tfoto fread($fpfilesize($tmp_name));
  
$tfoto addslashes($tfoto);
  
fclose($fp);
  
# contenido del thumbnail
  
$fp fopen(NAMETHUMB"rb");
  
$tthumb fread($fpfilesize(NAMETHUMB));
  
$tthumb addslashes($tthumb);
  
fclose($fp);
  
// Borra archivos temporales si es que existen
  
@unlink($tmp_name);
  @
unlink(NAMETHUMB);
  
// Guardamos todo en la base de datos
  
?>

NOTA Bueno con esto termina si necesitan algo o falta algo espero recibir sus criticas y me ayuden a mejorarlo o empeorarlo jajaaj gracias a todos saludos y porfavor sean compasivos es mi primer micro tutorial.... es mi primer bb lo puedo decir

luiggy2

Está interesante, pero si se llama microtutorial, es porque enseña a hacer las cosas, no solo poner código.

Por lo menos podrías poner algún que otro comentario.


Saludos!
" Las grandes ideas suelen salir la mayoría de veces de grandes estupideces "