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
|
|
簡単ですね。