はじめに
Lambdaで画像のサムネイルを作る [Stream yields empty buffer対策済] by @hkomachi on @Qiita
上記の記事を参考に,AWS Lambdaを使って動的画像リサイズを行おうとした際,もうちょっと細かいことをしようとして https://github.com/rsms/node-imagemagick の README読んでもわからなくて,結局慣れない中モジュールのコードを全部読んでしまったのでメモ。
メソッド紹介
メソッド(の一部)紹介。
上記リポジトリのREADMEの一部和訳と補足。
identify(args, callback(err, output))
imagemagick のidentify
コマンドと同様に画像の詳細を得る。
args
にはidentify
コマンドの引数をそのまま入力することが可能。
identify | ImageMagick コマンドリファレンス
im.identify(['-format', '%wx%h', 'kittens.jpg'], function(err, output){
if (err) throw err;
console.log('dimension: '+output);
// dimension: 3904x2622
});
ファイル名ではなく画像データを直接入れることも可能。
例えば,aws.s3
でs3バケットからオブジェクトをとってきた(ファイルパスを指定するのが難しい)ときは,
s3.getObject(params, (err, data) => {
if (err) {
} else {
im.identify(['-format', '%w', {data: data.Body}], function(err, output){
if (err) throw err;
console.log('dimension: '+output);
// dimension: 3904x2622
});
}
});
といったようにできる。
readMetadata(path, callback(err, metadata))
identify
コマンドを使うが,こっちは結果がmetadata
オブジェクトとして帰ってくる。
convert(args, callback(err, stdout, stderr))
convert
コマンドを使う。これもargs
は引数そのまま。
convert | ImageMagick コマンドリファレンス
resize(options, callback(err, stdout, stderr))
convert
コマンドのresize機能を使う。第一引数options
の内容例を示す。
{
srcPath: 'hoge.jpg', // 元画像パス srcDataと排他
srcData: null, // 元画像データ srcPathと排他
quality: 0.8,
format: 'jpg', // 出力フォーマット
width: 0, // 出力横幅
height: 0, // 出力高さ
customArgs: [] // 自由にオプションを追加できる
}
サイズ指定のあとに>
や<
を使って「指定サイズより(大き|小さ)ければ(縮小|拡大)」みたいなのができない。
一通りコード読んで,リサイズするにしても細かいことがしたければresize
ではなくconvert
を使ったほうがよいという結論に至った。
crop(options, callback)
resizeと同様convert
コマンドのcrop機能を使う。
これも細かくオプションを弄りたければconvert
関数のほうを使う必要がある。
さいごに
完璧なラッパーなど存在しない 😢
Top comments (0)