Node.js: processamento de imagem livre de dependência com ImageMagick

Há mais de uma maneira de fazer processamento de imagens em Node.js, mas aqui está uma que não requer módulos adicionais:

path = require 'path'
exec = require('child_process').exec
uuid
= require 'node-uuid'

exports
.process = (source, callback) ->
folder
= path.dirname source
guid
= uuid.v4()

convertCmd
= """
convert #{source} -quality 85% \\

-resize 620x465 -gravity center -background "
#666" -extent 620x465 -write #{folder}/#{guid}-large.jpg \\
-resize 460x345 -write #{folder}/#{guid}-medium.jpg \\
-resize 140x105 #{folder}/#{guid}-small.jpg
"""

watermarkCmd = """

composite
-dissolve 75% -gravity south \\
./resources/watermark.png #{folder}/#{guid}-large.jpg #{folder}/#{guid}-large.jpg
"""

await exec convertCmd, defer err; callback err if err

await exec watermarkCmd, defer err; callback err if err


callback null, guid

Em inglês simples, o método cria 3 versões de tamanhos diferentes de uma imagem de origem e aplica uma marca d’água na maior, simplesmente executando os utilitários de shell apropriados que vêm com o ImageMagick.

O snippet acima foi escrito em IcedCoffeeScript e foi ligeiramente adaptado de um dos meus projetos; node-uuidé usado lá para gerar nomes exclusivos.

Você precisa ter o ImageMagick instalado corretamente; a maneira mais fácil no OS X é brew install imagemagick.

Funciona perfeitamente no Heroku e provavelmente em outros provedores de PaaS também.

Node.js e ImageMagick