画像をリサイズして圧縮するヤツを修正した

画像を無限に再圧縮していた件にてとりあえず手当てをした画像をリサイズして圧縮するスクリプトを大幅に改修した。

最初の実装は

  1. sharpで入力フォルダにある画像をリサイズして出力フォルダに出力する
  2. 5秒待つ
  3. imageminで出力フォルダにある画像を圧縮して出力フォルダに出力する

というくそダサ設計だった。5秒待つって何だよ。ようは「リサイズが終わったら次の処理に行く」のが書けてなかったわけだ。リサイズと圧縮の順番が保証されてなかったというヤツで、JavaScriptの流儀が分からずC言語ライクな考え方で書いていたのだ。普通は関数に入ったら終わるまで出てこないと思うじゃん?(C言語脳) その上、出力フォルダを無限に再圧縮するという愚かな実装だったというね…。そりゃ段々かかる時間が延びていくわけだよ。

というわけで、大幅に改修したモノの中心部分が以下の通り。

imageminize.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// sharpでリサイズをする
console.log('Resize start.');
resize().then(() => {

// imageminで圧縮する
console.log('Compress start.');
compress().then(() => {

// tempファイルを削除する
console.log('Clean temp files.')
cleanTemp().then(() => {

// 終了
console.log('Finish!');
});
});
});

つまりは次のような動作になった。

  1. 入力フォルダに入っている画像をリサイズして一時フォルダに出力する
  2. それから、一時フォルダに入っている画像を圧縮して出力フォルダに出力する
  3. それから、一時フォルダに入っているファイルを削除して終了する

JavaScriptの流儀に従ってthen句で順序の保証をした感じだね。と書いたものの正直合ってるか自信ないのでJavaScript詳しい方はツッコミお願いします。エラー処理は…また次の機会でやるので今回は許してくれー。

というわけでとりあえず画像の取り扱いが大分平和になって良かった、うん。