Miniaturas Scala

Já precisou redimensionar uma imagem rapidamente, talvez para fazer uma miniatura para algum aplicativo da web ou outro? É uma operação bastante comum, usada por qualquer tipo de rede social ou site de comércio eletrônico.

Aqueles com experiência em Java vão se lembrar que esta tarefa, embora não seja complicada, exigia uma quantidade irritante de clichês e, a menos que sua memória seja como a de um elefante, uma viagem ao Google para encontrar os passos exatos.

Normalmente algo na linha de

BufferedImage original = ...
BufferedImage tmp = new BufferedImage(w, h, type);
Graphics2D g2 = tmp.createGraphics();
g2
.setRenderingHint(RenderingHints.KEY_INTERPOLATION, hint);
g2
.drawImage(original, 0, 0, w, h, null);
g2
.dispose();

E se quisermos ajustar a imagem em um determinado tamanho de tela, mantendo a proporção de aspecto. Esses tipos de operações comuns deveriam ter sido resolvidos anos atrás.

Digite scrimage. Uma biblioteca Scala para processamento de imagens.

Agora podemos fazer isso

val image = Image(someInputStreamOrFile)
val thumbnail
= image.scaleTo(160,120)

E é isso. Existem muitas operações disponíveis na instância Image. Veja o projeto para mais detalhes. https://github.com/sksamuel/scrimage