n8n
にはEditImageという画像処理ノードがインテグレーションされていて、簡単な操作ならこれで十分処理ができます。EditImageは内部でGraphicsMagick
が使われていますが、とある理由からImageMagick
を使いたくなりshell-jsonrpc
を使って実装してみました。shell-jsonrpcは、以前の記事でバイナリデータに対応するようになっています。
手順としては以下の通りです
- shell-jsonrpcにimagemagickを組み込んだDockerイメージの作成
- 1.のコンテナをn8nのdocker-composeに組み込む
- n8nにてインテグレーション
1. shell-jsonrpcにimagemagickを組み込んだDockerイメージの作成
これは簡単でalpineのパッケージをインストールするだけです。
FROM tumf/shell-jsonrpc:latest
RUN apk add --update imagemagick
このイメージはtumf/imagemagick-jsonrpcのDocker Hubリポジトリに公開してあります。
2. 1.のコンテナをn8nのdocker-composeに組み込む
これも簡単で、以下の通りn8nのdocker-compose.ymlに追記します。
imagemagick-jsonrpc:
image: tumf/imagemagick-jsonrpc:latest
これでdocker-comopse up -dでコンテナを立ち上げれば、imagemagick-jsonrpcが無事n8nから利用可能になります。
3. n8nにてインテグレーション
今回このような形でインテグレーションしました。試しにLinuxのロゴを縮小して回転するサンプルを作成してみます。
こんな感じに変換します。

インテグレーションの前に、n8nがどの様にバイナリデータを保持しているかを補足させてください。
n8nのバイナリデータの持ち方
n8nの通常のデータは、[{ "json": 通常のデータ }]のようにjsonキーに格納されていますが、バイナリデータは以下のようにbinaryキーに格納されています。
n8nのバイナリの構造
| |
こんな感じで$binary.data.dataにBase64エンコードされたバイナリデータが格納されています。
インテグレーション!
ノードを配置するとこんな感じ

ソース
| |
imagemagic-jsonrpcの前後にFunctionノードを挟んでjsonデータをbinaryに変換しています。
最初のFunction
| |
この、items[0].json.dataはBase64エンコードされた元画像ファイルのデータが入りますので、これをimagemagick-jsonrpcの標準入力に与えます。
| |
こんなリクエストになります。
二つ目のFunction
| |
簡単ですね。