Código fuente Ya.

Puede ejecutar la o las páginas para probar el concepto inmediatamente.

 

Concepto:Redimensionar una imagen con PHP (Thumbnail)

El concepto trata sobre:php
Autor:

Retornar

Nombre del archivo:pagina1.html

Comentarios
Implementaremos una clase que genere otra imagen redimensionada.
Podemos indicar en el constructor el ancho y el alto en píxeles de la nueva imagen a generar:
$thum1=new Thumbnail('foto1.jpg',100,200); // 100 píxeles de ancho por 200 de alto
También podemos llamar al método redimensionar e indicar en porcentaje cual es la redimensión
de la imagen que queremos:
$thum1->redimensionar(0.50); //La imagen será del 50% de la actual
Nombre del archivo:pagina1.php

Comentarios
Primero copiamos el archivo que se envió desde el navegador:
  copy($_FILES['imagen']['tmp_name'],$_FILES['imagen']['name']);
Importamos el archivo que contiene la clase:
  require('rutinas.php');
Creamos un objeto de la clase Thumbnail pasándo el nombre del archivo y el ancho y alto de la imagen
a generar:  
  $thum1=new Thumbnail($_FILES['imagen']['name'],150,100);
Guardamos en otro archivo con distinto nombre (le antecedemos tres x):  
  $thum1->guardar('xxx'.$_FILES['imagen']['name']);
Ahora indicamos que tome otra dimensión:  
  $thum1->redimensionar(0.50);
Generamos un segundo archivo con las nuevas medidas:  
  $thum1->guardar('yyy'.$_FILES['imagen']['name']);

Mostramos los tres archivos que hay en el servidor (el original y los dos thumbnail generados):
<img src="<?php echo $_FILES['imagen']['name']?>"><br>
<img src="<?php echo 'xxx'.$_FILES['imagen']['name']?>"><br>
<img src="<?php echo 'yyy'.$_FILES['imagen']['name']?>">
Nombre del archivo:rutinas.php

Comentarios
Definimos una serie de atributos para almacenar el nombre de archivo a procesar, su extensión y 
su nuevo ancho y alto:
  private $archi;
  private $extension;
  private $ancho;
  private $alto;
  
El constructor recibe el nombre de archivo a redimensionar y el nuevo ancho y alto en píxeles:  
  public function __construct($archi,$ancho=100,$alto=100)
Copiamos los parámetros a los atributos de la clase y extraemos la extensión del archivo a procesar:  
    $this->archi=$archi;
    $vec=explode('.',$archi);
    $this->extension=strtoupper($vec[sizeof($vec)-1]);
    $this->ancho=$ancho;
    $this->alto=$alto;
  }

El método guardarEnDisco recibe la referencia de la imagen ($imagen) generada en memoria y
el nombre del archivo a donde debemos almacenarla:
  private function guardarEnDisco($imagen,$archinuevo)
  {
    $vec=explode('.',$archinuevo);
    $ext=strtoupper($vec[sizeof($vec)-1]);
    switch ($ext) {
	  case "PNG":
            imagepng($imagen,$archinuevo);  
	    break;   
	  case "GIF":
            imagegif($imagen,$archinuevo);  
	    break;
	  case "JPG":;
	  case "JPEG":
             imagejpeg($imagen,$archinuevo);  
	     break;   		 
	}
  }
  
El método guardar recibe el nombre del nuevo archivo a generar, genera una imagen en memoria y
llama al método privado guardarEnDisco: 
  public function guardar($archinue)
  {
    $tam=getimagesize($this->archi); 
    $imagen=imagecreatetruecolor($this->ancho,$this->alto);  
    switch ($this->extension) {
	  case "PNG":
            $origen=imagecreatefrompng($this->archi);  
            imagecopyresampled($imagen,$origen,0,0,0,0,$this->ancho,$this->alto,$tam[0],$tam[1]);  
            $this->guardarEnDisco($imagen,$archinue);  
	    break;   
	  case "GIF":
            $origen=imagecreatefromgif($this->archi);  
            imagecopyresampled($imagen,$origen,0,0,0,0,$this->ancho,$this->alto,$tam[0],$tam[1]);  
            $this->guardarEnDisco($imagen,$archinue);  
	    break;
	  case "JPG":;
	  case "JPEG":
            $origen=imagecreatefromjpeg($this->archi);  
            imagecopyresampled($imagen,$origen,0,0,0,0,$this->ancho,$this->alto,$tam[0],$tam[1]);  
            $this->guardarEnDisco($imagen,$archinue);  
	    break;   		 
	}
  }

El método redimensionar asigna nuevos valores a los atributos ancho y alto según el porcentaje que
llega como parámetro:  
  public function redimensionar($porc)
  {
    $tam=getimagesize($this->archi); 
    $this->ancho=$tam[0]*$porc;
    $this->alto=$tam[1]*$porc;
  }

Retornar



Código Fuente Ya - 2015