2008-07-31

Poniendo a trabajar de verdad un computador

Esta vez me dedico a escribir, ya que por fin he ejecutado un proceso por lo tes de verdad diferente: procesar imágenes a través de PHP, utilizando una clase que hice alguna vez para un sitio web. La verdad no quise que se quedara sólo en ese sitio web, así que lo utilice para beneficio propio.
El problema: modificar 125 imágenes a un tamaño restringido capturando toda el área posible que se pueda.
La solución: utilizar el CLI de php con una clase que procese las imágenes (y todas sus extensiones: gd2) y un archivo de procesos por lote que haga el trabajo.
La implementación:
Primero tengo que recuperar todo el material en bruto para poder trabajar, así que veo que son 87 imágenes para empezar (después habrán otras 38 más), y pues, la verdad casi no me gusta trabajar con imágenes y gráficos, así que cambio mi trabajo por lo que de verdad sí me gusta: programar; recuerdo que tengo una clase que implementé hace unas semanas para un sitio web que lo fundamental que hace es redimensionar imágenes, aunque sé que hay algunos errores que debo corregir, pero por lo menos ya está empezada.


Una vez sé qué es lo que debo hacer, me dispongo a copiar todos los elementos de trabajo a un ambiente donde pueda ejecutar el proceso libremente, sin ningún inconveniente (después descubro que sí los hay), así que trabajaré por apache, con el módulo de php y bueno, ya el resto lo hará el mismísimo PHP.

El archivo de proceso por lotes es muy sencillo: la exploración estándar de directorio y un filtro para que sólo trabaje los archivos .jpg (con la expresión regular "^.+\\.jpg$", que concuerda con todos los archivos que tengan una extensión jpg). Ya de ahí simplemente utilizo una propiedad de la clase que implementé y por último llamo a la función imagejpeg para que me copie la imagen ya modificada en el directorio con un nombre específico, ya después solo es cerrar el directorio y listo.

La clase fue desarrollada para PHP 4, pero no afecta en nada el proceso. La función contiene alguna aritmética que permite posicionar la imagen en todo el centro. Por políticas de la empresa no me es posible liberar todo el código, ya que fue utilizado en un sitio y puede ser posible que lo utilicen en contra del sitio. Igual estoy pensando en crear una más robusta, y depronto una versión para liberar, igualmente todo esto va a estar dentro de la sección labs del sitio web de la empresa, que aún no se ha liberado, pero muy pronto lo haré.

El primer error, y no el único, fue el límite de ejecución de scripts en php, y con razón, es que debe procesar 87 imágenes, y no puede en 30 segundos hacer todo el trabajo, además, según mi experiencia, GD2 utiliza muchísimos recursos del sistema, por eso es mejor guardar las imágenes procesadas que procesarlas cada vez que se necesiten.

Ya después de muchas pruebas y errores, por fin di en el blanco, y pude utilizar el producto del proceso. Además utilicé jQuery, que es nuevo para mí.

Pueden ver el fruto de mi trabajo (sin excluir a PHP que hizo el trabajo sucio y sin ninguna queja) en http://www.mbling.net/blog/.
Después libero algún código acerca de esto.