あるイラストサイトを手伝っているのですが、やることは単純、ただし実行する事が細々と色々とあって時間がかかる。
自動化を行うにはどのプラットフォームで作業をするかによって違いますが、私の場合はWindowsなので昔なじみのあるコマンドプロンプトをいつも使っています。
コマンドプロンプトはうちのサイトに着てくださっている方々にはおなじみだと思いますが、要はテキストを打つ白黒画面のCUI画面の事です。
そして自動化スクリプトを作ると今までマウスとキーボードをせわしなく動かしていたことがなくなり、この作業だけでも一つのフォルダーに対する処理がどんなに早くても5~10分かかったのが1~2秒(マウス動かすだけの部分)、実質バックグラウンドでの処理に1~2分ほどしかかからない。しかも、同時に複数のフォルダーをパソコンのCPUの処理能力が許す限りいくらでも平行して行える。
手動で行う場合
- 画像を全てテンポラリーフォルダーへコピーする
- タグファイルもテンポラリーフォルダーへコピーする
- 268pxの画像サイズを生成
- タグファイルのコンマで区切られているファイルを正しく清書
- テンポラリーファイルの画像を最適化(複数のソフトで最適化)
- オリジナルフォルダーとテンポラリーフォルダーを全て圧縮しておく
自動化するとき
これらを自動化する場合は以下の様に変わる。
画像を全てテンポラリーフォルダーへコピーする
もとの送られてきたオリジナルファイルを間違って改変させないため。
タグファイルもテンポラリーフォルダーへコピーする
SEOやサイト内検索等に使用する為
268pxの画像サイズを生成
Featured Imageの為の画像
変換処理は以下の通り。
magick.exe mogrify -resize 268×268
使うには予め以下のインストールが必須。でも、あると便利。Windowsのはページの一番下にある。
タグファイルのコンマで区切られているファイルを正しく清書
1バイト文字のコンマ「,」と2バイト文字のコンマ「、」では扱いが全く違うのでこれを正しく1バイトのコンマにテキスト内のコンマを全て直す。
区切られているコンマ等を正しく処理するために最初にエンコード処理が必要
この処理を実行する為にGnuWin32のICONVを使用する。
処理をUTF-8で全部やりたかったのだが、コマンドによってはSJISでないと駄目だったのでこのICONVを使用してファイルを色々なフォーマットから変換。
iconv – LibIconv: convert between character encodings
他にもSEDを使って処理する方法もある。
あとはバッチ処理にて
set varchg1=、
set varchg2=,
という感じにし
またしてもgnuwinのTRを使って色々と処理。
ここで大事だったのはANSI、Shift_JIS、UTF-8、そして変換前後の文字化け。
今では文字化けっていうものは珍しくなりましたが、1990~2000年代初期までは文字化けっていうのは色々なウェブサイトを見ているとありましたので文字化けしていると思ったら都度、エンコーディングをメニューから変えていく必要がありましたね。
下記犯行文献(歴史的な背景の意味で)

テンポラリーファイルの画像を最適化
イラストで使っている画像を全て最適化=小さくしとく
これにはPNGQUANT、OXIPNG、Squoosh-Cliの三段圧縮を用いている
PngQuant
WindowsアプリのPngyuではpngquantが使われているので同じくPngQuantを使用。
ただ、もとのPngQuantは長らくアップデートされていない(2013年が最終っぽい)ので、もしpngyuを使う場合は中のpngquantをアップデートすると良いでしょう。
ちにみにPngyuをアップデート、又はPngQuantを入手したい場合は以下よりゲットできます。
使用方法は以下の通り。
pngquant.exe –force –speed 1 –quality 60-70 %1
PngQuantの圧縮値等は自分で調整しましょう。
注:pngquantは末尾に変なもの「ファイル名-fs8」をつけるのでバッチで処理するときはその変な末尾を取り除く事、又はそれを因数として次に渡す事が大事。
OxiPng
使用方法は、以下の通り。
oxipng.exe -o max -i 0 –strip all %1
oxipngの圧縮値は自分で調整しましょう。
Squoosh
squooshはSquoosh.appで用いているものと同じものだが、これのコマンドライン版
使用方法は以下の通り。
squoosh-cli –oxipng {level:2,interlace:false} %1
optipng、ImageOptim、zopflipng
自分の好みに合わして以下のPNG圧縮系のものもあります。
http://optipng.sourceforge.net
https://imageoptim.com
https://github.com/google/zopfli
オリジナルフォルダーとテンポラリーフォルダーを全て圧縮しておく
Zipや7zとかで書庫にするのではなく、Windows標準の圧縮でフォルダーごと圧縮対象にしておく。少しでもHDDの容量圧迫を防ぐため。
使用方法は以下。
COMPACT /C /S %1
最後にいろいろ
最後にバッチ処理のスクリプトを作ったらデスクトップにショートカットを作って、処理したい画像が入ったフォルダーをドラッグ&ドロップすれば勝手にコマンドプロンプトが開いて自動で処理してくれる。
一つのフォルダーに6個の画像ファイル + タグ用のテキストファイルがある場合、総容量はだいたい1.8MB。圧縮後のサイトは284KBとなる。アップロード回線が細い場合は1.8MBと284KBだと速さに天地の差があるし、サイト閲覧者がモバイル回線とかの場合わざわざ1.8MBもダウンロードするのに待つ時間も必要。そこを284KBに圧縮すればそれだけ読み込みも早くなる。
chcpやiconvとかを使用したのはテキストファイルや画像のファイル名が日本語が含まれているのでバッチ処理するときにバグったりするのを補正するため。ついでに、タグのテキストファイルの中身を英語とかに自動でしたかったけど、作った当時はdeeplとかでアプリやウェブ上ではできたけど、バッチ処理では日本語→英語ができなかったのでそこは入れることができなかった。それができたら更に時間短縮ができたんだが。
ちなみに、最終的にはWordPressに新しい投稿として貼り付けなければ行けないのでそれはまた別の話。
コメント