DesarrolloLibre

Desarrollo Web, Android, juegos y mucho más

Categorias
16-01-2018

En esta entrada veremos como aplicar procesamiento digital de imágenes en CodeIgniter, realizando operaciones simples que podemos realizar con editores de imágenes sencillos como PAINT o GIMP, pero de manera programática empleando PHP mediante CodeIgniter.

Ya hemos visto en anteriores entradas como realizar distintos tipos de tareas, funcionalidades, operaciones etc empleando el framework PHP CodeIgniter:

Por lo tanto ya tenemos parte del proceso que se encarga de subir las imágenes a nuestro servidor, ahora veamos cómo realizar un procesamiento digital de imágenes simple en CodeIgniter.

¿A qué nos referimos con procesamiento digital de imágenes?

A realizar operaciones simples sobre las imágenes como rotaciones de 90, 180, 270 grados, recortes, reescalado, marcas de agua variar la calidad de las imágenes e inclusive especificar si deseamos sobreescribir la imagen existente o generar una nueva.

Todo esto sin necesidad de emplear un software de un tercero como GIMP, Photoshop, etc.

Todas estas operaciones se realizan sobre imágenes cargadas en nuestro servidor mediante el ya conocido método de carga que ofrece CodeIgniter o cargadas mediante cualquier otra forma (lo importante es que existan imágenes que se puedan consultar):

De nuestra parte queda indicar si queremos aplicar operaciones sobre las imágenes, si justo después de realizar la carga de las imágenes, o en una tarea o módulo aparte.

Reescalado de las imágenes

public function resize() {
    $this->load->library('image_lib');
    $config['image_library'] = 'gd2';
    $config['source_image'] = 'uploads/paysheet/image.jpg';
    $config['maintain_ratio'] = TRUE;
    //$config['new_image'] = 'uploads/paysheet/new_image.jpg';
    $config['width'] = 100;
    $config['height'] = 100;
    $this->image_lib->clear();
    $this->image_lib->initialize($config);
    if (!$this->image_lib->resize()) {
        echo $this->image_lib->display_errors();
    }
}

El código en general es bastante sencillo; primero cargamos la libreria para el procesamiento digital de las imágenes (la que realmente realiza las operaciones) e indicamos la librería a emplear:

$this->load->library('image_lib');
$config['image_library'] = 'gd2';

Indicamos la imagen fuente a procesar, esta imagen a menos que se especifique otra configuración esta imagen referenciada en esta configuración es la que empleará CodeIgniter para efectuar los cambios:

$config['source_image'] = 'uploads/paysheet/image.jpg';

Luego indicamos que deseamos mantener el radio o proporción de la imagen:

$config['maintain_ratio'] = TRUE;

indicamos el ancho/largo de la imagen a reescalar:

$config['width'] = 100;
$config['height'] = 100;

Finalmente establecemos las configuraciones previamente realizadas y explicadas en el paso anterior y aplicamos el reescalado, la función devuelve un booleano que indica si fue exitoso o no la operación de reescalado:

$this->image_lib->clear();
$this->image_lib->initialize($config);
if (!$this->image_lib->resize()) {
    echo $this->image_lib->display_errors();
}

Preservar la imagen fuente

Si no queremos que las modificaciones se realicen sobre la imagen original que es la referenciada en la configuración $config['source_image'] podemos descomentar la línea de código $config[new_image] que se encuentra comentada en el bloque anterior (y los posteriores a este) que nos permite crear una copia de la imagen original (para mantener la imagen original intacta) y realizar los cambios sobre esta nueva imagen, esto es muy útil si no queremos mantener la imagen original libre de cambios y otra imagen que se le apliquen el procesamiento digital de imágenes.

Recorte (crop) de las imágenes

Como podemos ver tiene partes similares al anterior salvo por algunas modificaciones que realizamos para cumplir con la tarea de recortar una imagen; definimos la posición 'X' y 'Y' en pixeles; además de esto es necesario reescalar la imagen en las mismas proporciones del trozo que deseamos recortar:

public function crop() {
    $this->load->library('image_lib');
    $size = getimagesize('uploads/paysheet/image.jpg');
    var_dump($size);
    $config['image_library'] = 'gd2';
    $config['source_image'] = 'uploads/paysheet/image.jpg';
//        $config['new_image'] = 'uploads/paysheet/new_image.jpg';
    $config['x_axis'] = 300;
    $config['y_axis'] = 60;
    $config['width'] = 500 - 300;
    $config['height'] = 500 - 60;
    $config['new_image'] = 'uploads/paysheet/new_image.jpg';
    $this->image_lib->initialize($config);
    if (!$this->image_lib->crop()) {
        echo $this->image_lib->display_errors();
    }
}

En otras palabras, si vamos a recortar desde el punto 300 y 60 del plano cartesiano aplicado sobre nuestra imagen, y las dimensiones de nuestra imagen son de 500 pixeles tanto de altura como de anchura, entonces la imagen resultante debe tener una dimensión de (500-300) 200 x (500-60) 440 pixeles.

Rotación de las imágenes

Para rotar las imágenes podemos emplear alguno de los siguientes valores predefinidos:

public function rotate() {//90, 180, 270, vrt, hor
    $this->load->library('image_lib');
    $config['image_library'] = 'gd2';
    $config['source_image'] = 'uploads/paysheet/image.jpg';
    //$config['new_image'] = 'uploads/paysheet/new_image.jpg';
    $config['rotation_angle'] = '90';
    $config['new_image'] = 'uploads/paysheet/new_image.jpg';
    $this->image_lib->clear();
    $this->image_lib->initialize($config);
    if (!$this->image_lib->rotate()) {
        echo $this->image_lib->display_errors();
    }
}

Marca de agua sobre nuestra imagen

Aquí vamos a agregar la marca de agua sobre una imagen fuente, como puede ver siguen manteniendo buena parte de las configuraciones realizadas anteriormente para indicar la fuente de la imagen, generar una copia de la imagen, librería etc.

También indicamos el texto que tendrá la marca de agua, se indica que es de tipo texto, la fuente de la marca de agua, el tamaño de letra, el color de la letra, la posición de la marca de agua en el eje vertical y horizontal, el espaciado o margen interno de la marca de agua respectivamente:

    $config['wm_text'] = 'Copyright 2018 - Andrés Cruz';
    $config['wm_type'] = 'text';
    $config['wm_font_path'] = './system/fonts/texb.ttf';
    $config['wm_font_size'] = '16';
    $config['wm_font_color'] = 'ffffff';
    $config['wm_vrt_alignment'] = 'bottom';
    $config['wm_hor_alignment'] = 'center';
    $config['wm_padding'] = '2';

El código completo sería el siguiente:

public function watermark() {
    $this->load->library('image_lib');
    $config['image_library'] = 'NetPBM';
    $config['source_image'] = 'uploads/paysheet/image.jpg';
    $config['wm_text'] = 'Copyright 2006 - John Doe';
    $config['wm_type'] = 'text';
    $config['wm_font_path'] = './system/fonts/texb.ttf';
    $config['wm_font_size'] = '16';
    $config['wm_font_color'] = 'ffffff';
    $config['wm_vrt_alignment'] = 'bottom';
    $config['wm_hor_alignment'] = 'center';
    $config['wm_padding'] = '2';
    $config['quality'] = '10';
    $config['new_image'] = 'uploads/paysheet/new_image.jpg';
    $this->image_lib->initialize($config);
    if (!$this->image_lib->watermark()) {
        echo $this->image_lib->display_errors();
    }
}

Partes de estas configuraciones y otras que son de propósito general y que no influyen sobre el comportamiento de la función, como el caso de la preferencia quality (que hace un gran tamaño al momento de reducir el tamaño de las imágenes sacrificando un poco de calidad) pueden ser empleadas en distintos contextos de la tarea a realizar, entiéndase que podemos emplear (por ejemplo) la preferencia quality en las tareas que se encargan de reescalar, cortar y/o rotas las imágenes sin mayor problemas. Puedes consultar la documentación oficial en el siguiente enlace: CodeIgniter: Image Manipulation Class y ver el total de las preferencias que podemos emplear


Publicidad

Give me for a beer!

Algunos recursos que te pueden interesar

API REST en CodeIgniter

API REST en CodeIgniter

Efectos hover con CSS

Efectos hover con CSS

CompressNow: optimiza tus imágnes GIF, JPG y PNG.

CompressNow: optimiza tus imágnes GIF, JPG y PNG.

Algunos artículos que te pueden interesar

¿Cómo encriptar textos con CodeIgniter?

¿Cómo encriptar textos con CodeIgniter?

En esta entrada veremos cómo emplear la clase de encriptación con Codeigniter para encriptar cadenas de textos como contraseñas o claves y cómo desencriptar estas cadenas.

Andrés Cruz 02-03-2016

Efectos hovers sobre imágenes con CSS

Efectos hovers sobre imágenes con CSS

En esta entrada veremos cómo crear un simple efecto hover con CSS sobre una imagen; para esto se coloca una imagen como fondo en un contenedor y colocar múltiples cuadros consecutivos (divs) de una fracción del tamaño del fondo.

Andrés Cruz 17-03-2016

¿Cómo cambiar el contraste de una imagen con HTML5?

¿Cómo cambiar el contraste de una imagen con HTML5?

En este artículo veremos cómo aumentar o reducir el contraste de una imagen con HTML5; además hablaremos un poco de como sería el proceso para aumentar el brillo de una imagen; que es un caso similar.

Andrés Cruz 12-05-2014