<?php
class imagen
{
private $imagen;
private $tipo;
private $ancho;
private $alto;
public function cargaImg($nombre)
{
$info = getimagesize($nombre);
$this->ancho = $info[0];
$this->alto = $info[1];
$this->tipo = $info[2];
switch ($this->tipo) {
case IMAGETYPE_JPEG:
$this->imagen = imagecreatefromjpeg($nombre);
break;
case IMAGETYPE_GIF:
$this->imagen = imagecreatefromgif($nombre);
break;
case IMAGETYPE_PNG:
$this->imagen = imagecreatefrompng($nombre);
break;
default:
}
}
public function guardar($nombre, $quality = 100, $tipo = false)
{
$tipo = ($tipo) ? $tipo : $this->tipo;
switch ($tipo) {
case IMAGETYPE_JPEG:
imagejpeg($this->imagen, $nombre . image_type_to_extension($tipo), $quality);
break;
case IMAGETYPE_GIF:
imagegif($this->imagen, $nombre . image_type_to_extension($tipo));
break;
case IMAGETYPE_PNG:
$pngquality = floor($quality / 100 * 9);
imagepng($this->imagen, $nombre . image_type_to_extension($tipo), $pngquality);
break;
default:
}
}
public function redimensionar($value, $prop)
{
$prop_value = ($prop == 'width') ? $this->ancho : $this->alto;
$prop_versus = ($prop == 'width') ? $this->alto : $this->ancho;
$pcent = $value / $prop_value;
$value_versus = $prop_versus * $pcent;
$imagen = ($prop == 'width') ? imagecreatetruecolor($value, $value_versus) : imagecreatetruecolor($value_versus, $value);
if ($this->tipo == IMAGETYPE_GIF || $this->tipo == IMAGETYPE_PNG) $this->preparar_imagen($imagen);
switch ($prop) {
case 'width':
imagecopyresampled($imagen, $this->imagen, 0, 0, 0, 0, $value, $value_versus, $this->ancho, $this->alto);
break;
default:
imagecopyresampled($imagen, $this->imagen, 0, 0, 0, 0, $value_versus, $value, $this->ancho, $this->alto);
}
$this->ancho = imagesx($imagen);
$this->alto = imagesy($imagen);
$this->imagen = $imagen;
}
public function recortar($rec_ancho, $rec_alto, $pos = 'center')
{
$pcent = min($this->ancho / $rec_ancho, $this->alto / $rec_alto);
$bigw = (int) ($pcent * $rec_ancho);
$bigh = (int) ($pcent * $rec_alto);
$imagen = imagecreatetruecolor($rec_ancho, $rec_alto);
if ($this->tipo == IMAGETYPE_GIF || $this->tipo == IMAGETYPE_PNG) $this->preparar_imagen($imagen);
switch ($pos) {
case 'left':
imagecopyresampled($imagen, $this->imagen, 0, 0, 0, abs(($this->alto - $bigh) / 2), $rec_ancho, $rec_alto, $bigw, $bigh);
break;
case 'right':
imagecopyresampled($imagen, $this->imagen, 0, 0, $this->ancho - $bigw, abs(($this->alto - $bigh) / 2), $rec_ancho, $rec_alto, $bigw, $bigh);
break;
case 'top':
imagecopyresampled($imagen, $this->imagen, 0, 0, abs(($this->ancho - $bigw) / 2), 0, $rec_ancho, $rec_alto, $bigw, $bigh);
break;
case 'bottom':
imagecopyresampled($imagen, $this->imagen, 0, 0, abs(($this->ancho - $bigw) / 2), $this->alto - $bigh, $rec_ancho, $rec_alto, $bigw, $bigh);
break;
default:
imagecopyresampled($imagen, $this->imagen, 0, 0, abs(($bigw - $this->ancho) / 2), abs(($bigh - $this->alto) / 2), $rec_ancho, $rec_alto, $bigw, $bigh);
}
$this->ancho = $rec_ancho;
$this->alto = $rec_alto;
$this->imagen = $imagen;
}
private function preparar_imagen($imagen)
{
switch ($this->tipo) {
case IMAGETYPE_GIF:
$background = imagecolorallocate($imagen, 0, 0, 0);
imagecolortransparent($imagen, $background);
break;
case IMAGETYPE_PNG:
imagealphablending($imagen, FALSE);
imagesavealpha($imagen, TRUE);
break;
}
}
private static function reflejarImagen($imagenOriginal)
{
$anchura = imagesx($imagenOriginal);
$altura = imagesy($imagenOriginal);
$origenDeX = $anchura - 1;
$origenDeY = 0;
$anchura_original = -$anchura;
$altura_original = $altura;
$imagenDeDestino = imagecreatetruecolor($anchura, $altura);
if (imagecopyresampled($imagenDeDestino, $imagenOriginal, 0, 0, $origenDeX, $origenDeY, $anchura, $altura, $anchura_original, $altura_original)) return $imagenDeDestino;
return $imagenOriginal;
}
public function endereza($ficheroDeImagen)
{
$codificacionExif = exif_read_data($ficheroDeImagen);
if ($codificacionExif && isset($codificacionExif['Orientation'])) {
$orientacion = $codificacionExif['Orientation'];
if ($orientacion != 1) {
$imagenEnProceso = imagecreatefromjpeg($ficheroDeImagen);
$reflejo = false;
$grados = 0;
switch ($orientacion) {
case 2:
$reflejo = true;
break;
case 3:
$grados = 180;
break;
case 4:
$grados = 180;
$reflejo = true;
break;
case 5:
$grados = 270;
$reflejo = true;
break;
case 6:
$grados = 270;
break;
case 7:
$grados = 90;
$reflejo = true;
break;
case 8:
$grados = 90;
break;
}
if ($grados) $imagenEnProceso = imagerotate($imagenEnProceso, $grados, 0);
if ($reflejo) $imagenEnProceso = self::reflejarImagen($imagenEnProceso);
imagejpeg($imagenEnProceso, $ficheroDeImagen);
}
}
return true;
}
public function borra_file($file)
{
if (file_exists($file)) {
unlink($file);
}
}
}