Location: PHPKode > scripts > Resizer > class.resizer.php
<?php

/* 
 * FECHA: 12-03-2010
 * CREADOR: ESTEFANO SALAZAR
 * 
 * CLASE PARA SUBIR IMAGENES
 * Y HACER UN RESIZE PERSONALIZADO.
 * NO DEFORMA LA IMAGEN.
 * 
*/

class resizer	{

//	DEFINO EL ARRAY QUE VA A CONTENER LAS EXTENSIONES PERMITIDAS
	var $_extensiones_pe = array( "jpg", "png" );
	
//	FUNCION PARA BUSCAR LA EXTENSION
	private function buscaExtension( $nombre )	{
		if( trim( $nombre ) != "" )	{
//			DEFINO LA EXTENSION CON UN EXPLODE
			$extension = explode( ".", $nombre );
			$extension = strtolower( end( $extension ) );
//			DEVUELVO LA EXTENSION
			return $extension;
		} else	{
//			DEVUELVO UN FALSE ( BOOLEAN )
			return false;
		}
	}
	
//	FUNCION PARA CREAR EL NOMBRE
	private function creaNombre( $nombre, $dir )	{
//		SI SE PUEDE SACAR LA EXTENSION SIGO
		if( $extension = $this->buscaExtension( $nombre ) )	{
			if( substr( $dir, 0, -1 ) != "/" )	$dir = $dir . "/";
			$a = 1;
//			BUCLE PARA BUSCAR UN NOMBE QUE NO SE REPITA
			while( $a )	{
//				EL NUEVO NOMBRE SERA EJ: xa├▒omesdia.extension
				$nuevo_nombre = $dir . $a . date( "Ymd" ) . '.' . $extension;
				if( file_exists( $nuevo_nombre ) )	{
					$a++;
				} else	{
					$a = 0;
				}
			}
//			DEVUELVO EL NOMBRE
			return $nuevo_nombre;
			
		} else	{
//			DEVUELVO FALSE ( BOOLEAN )
			return false;
		}
	}
	
//	FUNCION PARA SUBIR EL ARCHIVO
	public function subir( $tmp, $name, $dir )	{
//		SI ESTAN DEFINIDOS LOS PARAMETROS DE LA IMAGEN
		if( $tmp && $name && $dir )	{
//			DEFINO EL NUEVO NOMBRE DE LA IMAGEN
			$nombre_nuevo = $this->creaNombre( $name, $dir );
			if( substr( $dir, strlen( $dir ) - 1, 1 ) != "/" ) $dir = $dir . "/";
			$nombre_fisico = $nombre_nuevo;
			
//			SI SE PUEDE CREAR LA EXTENSION, SIGO
			if( $extension = $this->buscaExtension( $nombre_nuevo ) )	{
//				SI LA EXTENSION ESTA DENTRO DEL ARRAY DE EXTENSIONES, SIGO
				if( in_array( $extension, $this->_extensiones_pe ) )	{
//					SI SE COPIA LA IMAGEN, DEVUELVO EL NOMBRE FISICO
					if( copy ( $tmp, $nombre_fisico ) )	{
						return $nombre_fisico;
					} else	{
//						SI NO SE PUEDE COPIAR, DEVUELVO FALSE( BOOLEAN )
						return false;
					}
				} else	{
//					SI NO SE ENCONTRO LA EXTENSION DEVUELVO FALSE ( BOOLEAN )
					return false;
				}
			} else	{
//				SI NO SE PUDO CREAR LA EXTENSION DEVUELVO FALSE ( BOOLEAN )
				return false;
			}
		} else	{
//			SI NO SE DEFINIERON LOS PARAMETROS DE LA EXTENSION DEVUELVO FALSE ( BOOLEAN )
			return false;
		}
	}

//	FUNCION QUE RESIZEA
	public function resize( $name, $tmp_name, $dir, $n_width = 300, $n_height = 300 )	{
//		VERIFICO QUE SUBA EL ARCHIVO		
		if( $nombre_fisico = $this->subir( $tmp_name, $name, $dir ) )	{
//			VERIFICO QUE ESTEN ESPECIFICADOS LOS PARAMETROS DE LA FUNCION
			if( $name && $tmp_name && $dir && $n_width && $n_height )	{
				$nuevo_nombre = $this->creaNombre( $name, $dir );
//				DEFINO LA EXTENSION DEL ARCHIVO
				$extension = $this->buscaExtension( $nuevo_nombre );
//				VERIFICO QUE EL DIR. FINALICE CON UNA BARRA
				if( substr( $dir, 0, -1 ) != "/" )	$dir = $dir . "/";
//				SACO EL ANCHO Y ALTO DE LA IMAGEN
				list( $width, $height ) = getimagesize( $tmp_name );
//				DEFINO EL RADIO DE LA IMAGEN
				$radio = $width/$height;
//				DEFINO EL NUEVO ANCHO Y ALTO DE LA IMAGEN
				if( $n_width / $n_height > $radio )	{
					$n_width = $n_height*$radio;
				} else	{
					$n_height = $n_width/$radio;
				}
				
//				CREA LA IMAGEN
				switch( $extension )	{
					case "jpg":
						$src = imagecreatefromjpeg( $nombre_fisico );
					break;
					case "png":
						$src = imagecreatefrompng( $nombre_fisico );
					break;
				}
				
//				CREO LA IMAGEN EN COLOR REAL
				$nueva_imagen = imagecreatetruecolor( $n_width, $n_height );
//				CREA LA IMAGEN RESIZEADA
				imagecopyresampled( $nueva_imagen, $src, 0, 0, 0, 0, $n_width, $n_height, $width, $height );
//				DEFINO LA IMAGEN
				switch( $extension )	{
					case "jpg":
						imagejpeg( $nueva_imagen, $nombre_fisico, 99 );
					break;
					case "png":
						imagepng( $nueva_imagen, $nombre_fisico, 99 );
					break;
				}
//				DEVUELVO QUE SUBI
				return "Imagen subida con exito";
				
			} else	{
//				DEVUELVO QUE HUBO UN ERROR EN LOS PARAMETROS
				return "Faltan datos de la imagen";
			}
			
		} else	{
//			DEVUELVO QUE NO SE PUDO SUBIR LA IMAGEN. FALLO LA FUNCION $this->subir()
			return "No se pudo subir la imagen";
		}
		
	}
	
}

?>
Return current item: Resizer