rodrigobertin
9/25/2014 - 7:18 PM

Image rezise avanzado

Image rezise avanzado

<?php
//la imagen y sus datos
$ruta_imagen = $_REQUEST['src'];
@$ancho_deseado = $_REQUEST['ancho'];
@$alto_deseado = $_REQUEST['alto'];

//Tamaño original
$info_fuente = getimagesize($ruta_imagen);
$ancho_original = $info_fuente[0];
$alto_original = $info_fuente[1];


//el tipo de mime
$tipo_mime = $info_fuente['mime'];

//=== si no se pone el alto ====//
if (!isset($_REQUEST['alto']) && isset($_REQUEST['ancho'])) {
  //si no pone alto
  $alto_deseado = ($ancho_deseado * $alto_original) / $ancho_original;
} else {
  //si pone alto se fuerza
  @$alto_deseado = $_REQUEST['alto'];
}

//==== si no se pone el ancho ==//
if (!isset($_REQUEST['ancho']) && isset($_REQUEST['alto'])) {
  //si no pone ancho
  $ancho_deseado = ($alto_deseado * $ancho_original) / $alto_original;
} else {
  //si pone ancho se fuerza
  @$ancho_deseado = $_REQUEST['ancho'];
}

//===== poner la imagen tal cual =====//
if (!isset($_REQUEST['ancho']) && !isset($_REQUEST['alto'])) {
  $ancho_deseado = $ancho_original;
  $alto_deseado = $alto_original;
}


$recurso_copia = imagecreatetruecolor($ancho_deseado, $alto_deseado);

//segun el tipo creo
if ($tipo_mime == 'image/png') { //para png
  //poner fondo transparente
  $recurso_fuente = imagecreatefrompng($ruta_imagen);
  imagealphablending($recurso_copia, false);
  imagesavealpha($recurso_copia, true);
  $transparent = imagecolorallocatealpha($recurso_copia, 255, 255, 255, 127);
  imagefilledrectangle($recurso_copia, 0, 0, $ancho_deseado, $alto_deseado, $transparent);
  //crear la imagen
  imagecopyresampled($recurso_copia, $recurso_fuente, 0, 0, 0, 0, $ancho_deseado, $alto_deseado, $info_fuente[0], $info_fuente[1]);

} elseif ($tipo_mime == 'image/jpeg') { //para jpeg

  $recurso_fuente = imagecreatefromjpeg($ruta_imagen);
  imagecopyresampled($recurso_copia, $recurso_fuente, 0, 0, 0, 0, $ancho_deseado, $alto_deseado, $info_fuente[0], $info_fuente[1]);


} elseif ($tipo_mime == 'image/gif') { //para gif
  //poner fondo transparente
  $recurso_fuente = imagecreatefromgif($ruta_imagen);
  imagealphablending($recurso_copia, false);
  imagesavealpha($recurso_copia, true);
  $transparent = imagecolorallocatealpha($recurso_copia, 255, 255, 255, 127);
  imagefilledrectangle($recurso_copia, 0, 0, $ancho_deseado, $alto_deseado, $transparent);

  //crear la imagen
  imagecopyresampled($recurso_copia, $recurso_fuente, 0, 0, 0, 0, $ancho_deseado, $alto_deseado, $info_fuente[0], $info_fuente[1]);

}

//crear todito
@header('Content-type: ' . $tipo_mime);
imagepng($recurso_copia);
imagedestroy($recurso_copia);
imagedestroy($recurso_fuente);
?>