DEV Community

Débora Fernandes
Débora Fernandes

Posted on • Originally published at Medium on

Upload de SVG com Image Magick + AWS

Esse foi mais um dia daqueles “Na minha máquina funciona”, onde o upload de arquivos funcionava perfeitamente no ambiente de DEV e no ambiente de produção antigo, mas quebrava na nova instância que estavamos homologando na AWS.

Já imaginava que tinha o ImageMagick instalado em produção, mas como o upload de imagens não acontecia:

convert -background none some\_image.svg some\_image.jpg 
convert: not authorized `some\_image.svg’ @ error/constitute.c/ReadImage/454.
convert: no images defined `some\_image.jpg’ @ error/convert.c/ConvertImageCommand/3046.
Enter fullscreen mode Exit fullscreen mode

whathell

Desconfiei que talvez a versão estivesse desatualizada…

$ convert -version

Version: ImageMagick 6.7.8–9 2016–06–22 Q16 http://www.imagemagick.org
Copyright: Copyright © 1999–2012 ImageMagick Studio LLC
Features: OpenMP
Enter fullscreen mode Exit fullscreen mode

Okay, tinha a versão atualizada!

😏 até janeiro de 2018 ao menos

Aí começou aquele trabalho de formiguinha, para entender um pouco melhor como funciona o ImageMagick.

O ImageMagick tem entre outros helpers, o comando convert -list delegate, que exibe o comando que é executado para cada tipo de manipulação de imagem. A conversão de SVG usa por baixo dos panos o comando rsvg-convert-o "%o" "%i".

Como esse comando não era reconhecido no SO do server, foi fácil de ver que era necessário instalar essa lib e suas dependências.

Se tornou mais fácil, pq contamos com a ajuda do @tavinus que publicou esse gist install-gm-w-librvg.sh. 😃

Legal né? Mas após tudo isso, ainda não conseguia fazer a conversão de arquivos svg para png

Não foi =/ #dammit!

Pesquisando um pouco mais, vi que alguns tipos de arquivos .svg, .txt, etc e algumas fontes ( como imagens vindas da web ) tem upload blockeada por padrão na configuração de policies do ImageMagick, que geralmente fica em /etc/ImageMagick/policy.xml e podem ser vistas nos rightsdo comando convert -list policy

A solução então era alterar esses direitos para esse tipo de arquivo na linha:

\<policy domain=”coder” rights=”none” pattern=”MVG” /\>
Enter fullscreen mode Exit fullscreen mode

E finalmente, após instalar a lib necessária para conversão de SVG e ajustar a regra para esse tipo de arquivo, meu upload finalmente funcionou!

Top comments (0)