4Trabes Historias de una empresa en 100 metros cuadrados

El blog de Trabe Soluciones

Crear thumbnails ligeros con Minimagick

|

Tras el apagón voluntario de 5 minutos (que por lo menos en esta nuestra ciudad ha disfrutado de una acogida muuuy modesta) vamos a hablar brevemente de como crear lightweight thumbnails desde nuestra aplicación Ruby utilizando MiniMagick.

Minimagick es una librería minimalista para trabajar con imágenes. Soporta las acciones más habituales que uno puede necesitar realizar sobre una imagen. Pero tiene un gran problema: hay muy poca documentación sobre ella, asi que al final solo nos queda mirar el código fuente, que tampoco es que duela, pero da un poco de pereza :D.

Hay que reconocer que en este caso el código es bastante entendible. Como no he encontrado ninguna página donde explicaran en un par de líneas como se puede cambiar el parámetro de calidad de un jpg, lo explico aqui. Las distintas acciones que permite realizar Minimagick se ejecutan mediante invocaciones al comando mogrify, con distintos parámetros. Hay ciertos métodos definidos de una forma explicita, pero si nos salimos de ahi, como casi siempre en nuestro querido Ruby, la clave está en la implementación del amado method_missing:

1
2
3
4
def method_missing(symbol, *args)
   args.push(@path) # push the path onto the end
   run_command("mogrify", "-#{symbol}", *args)
end

Más sencillo no se puede. Ahora llega con saber que el flag para modificar la calidad de una imagen es quality, y que la unidad es el tanto por cien (100 lo mejor posible, 0 lo peor) y ya está la receta completa. Supongamos que tenemos un objeto Image que hemos bautizado como my_image y que ya está instanciado. Si queremos guardarlo con una calidad del 70%, será suficiente con el siguiente código:

1
2
my_image.quality 70
my_image.write(...)

Obviamente, en el mundo real donde hay que hacer más cosas que cambiar la calidad con que se graba un jpg, se podría utilizar el método combine_options para hacer varias cosas en un solo comando mogrify.

Lo sentimos, pero los comentarios están cerrados