Para un nuevo proyecto en el que estoy inmerso he tenido que volver a mi amado php.
El proyecto lo estoy desarrollando con CodeIgniter porque es muy simple y versatil y se ajusta perfectamente a mis necesidades.
Una de las cosas que tenía que hacer y es sobre lo que trata este post es sobre la redimensión de imágenes y la calidad. La idea es que es que la petición de imágenes no se haga directamente a la imagen si no que se haga a un controlador que sea el que las distribuya y dependiendo de la petición devuelva una imagen u otra y con un tamaño y calidad diferente. Para ello voy a utilizar la librería WideImage.
Para utilizarla únicamente la descargamos, copiamos el contenido en la carpeta "WideImage" que creamos dento de la carpeta "Libraries" de CodeIgniter.
Creamos el Controller que maneja las imágenes:
class ImageLoader extends CI_Controller {
//put your code here
public function load() {
$uriOriginal = $this->uri->ruri_string();
$fileName = "." . str_replace("/imageloader/load", "", $uriOriginal);
$width = 100;
$height = 100;
$quality = 100;
$percentaje = 100;
if (isset($_GET['w']))
$width = $_GET['w'];
if (isset($_GET['h']))
$height = $_GET['h'];
if (isset($_GET['q']))
$quality = $_GET['q'];
if (isset($_GET['pr']))
$percentaje = $_GET['pr'];
$this->load->library('wideimage');
if (isset($_GET['pr']))
$this->wideimage->load($fileName)->resize((int)$percentaje."%")->output('jpg', (int) $quality);
else if(isset($_GET['w']) && isset($_GET['h']))
$this->wideimage->load($fileName)->resize((int) $width, (int) $height)->output('jpg', (int) $quality);
else
$this->wideimage->load($fileName)->output('jpg', (int) $quality);
}
}
Hacemos la llamada desde la vista a la URL del control de la imagen:
imageloader/load/images/benidorm/activities/children_games/ninos_jugando.jpg?pr=50%$q=30
Espero que os sirva de ayuda.
Un saludo.