タスクの自動化(半自動化)は大事

画像のバッチ処理

あるイラストサイトを手伝っているのですが、やることは単純、ただし実行する事が細々と色々とあって時間がかかる。

自動化を行うにはどのプラットフォームで作業をするかによって違いますが、私の場合はWindowsなので昔なじみのあるコマンドプロンプトをいつも使っています。

コマンドプロンプトはうちのサイトに着てくださっている方々にはおなじみだと思いますが、要はテキストを打つ白黒画面のCUI画面の事です。

そして自動化スクリプトを作ると今までマウスとキーボードをせわしなく動かしていたことがなくなり、この作業だけでも一つのフォルダーに対する処理がどんなに早くても5~10分かかったのが1~2秒(マウス動かすだけの部分)、実質バックグラウンドでの処理に1~2分ほどしかかからない。しかも、同時に複数のフォルダーをパソコンのCPUの処理能力が許す限りいくらでも平行して行える。

目次

手動で行う場合

  1. 画像を全てテンポラリーフォルダーへコピーする
  2. タグファイルもテンポラリーフォルダーへコピーする
  3. 268pxの画像サイズを生成
  4. タグファイルのコンマで区切られているファイルを正しく清書
  5. テンポラリーファイルの画像を最適化(複数のソフトで最適化)
  6. オリジナルフォルダーとテンポラリーフォルダーを全て圧縮しておく

自動化するとき

これらを自動化する場合は以下の様に変わる。

画像を全てテンポラリーフォルダーへコピーする

もとの送られてきたオリジナルファイルを間違って改変させないため。

タグファイルもテンポラリーフォルダーへコピーする

SEOやサイト内検索等に使用する為

268pxの画像サイズを生成

Featured Imageの為の画像

変換処理は以下の通り。

magick.exe mogrify -resize 268×268

使うには予め以下のインストールが必須。でも、あると便利。Windowsのはページの一番下にある。

ImageMagick
ImageMagick Create, Edit, Compose, or Convert Digital Images

タグファイルのコンマで区切られているファイルを正しく清書

1バイト文字のコンマ「,」と2バイト文字のコンマ「、」では扱いが全く違うのでこれを正しく1バイトのコンマにテキスト内のコンマを全て直す。

区切られているコンマ等を正しく処理するために最初にエンコード処理が必要

この処理を実行する為にGnuWin32のICONVを使用する。

処理をUTF-8で全部やりたかったのだが、コマンドによってはSJISでないと駄目だったのでこのICONVを使用してファイルを色々なフォーマットから変換。

iconv – LibIconv: convert between character encodings

あわせて読みたい
GnuWin32 GnuWin32 provides Win32 (MS Windows 95 / 98 / ME / NT / 2000 / XP / 2003 / Vista / 2008) ports of tools with a GNU or similar open source license.

他にもSEDを使って処理する方法もある。

あとはバッチ処理にて
set varchg1=、
set varchg2=,
という感じにし
またしてもgnuwinのTRを使って色々と処理。

あわせて読みたい
tr - Command line text processing with GNU Coreutils Command line text processing with GNU Coreutils

ここで大事だったのはANSI、Shift_JIS、UTF-8、そして変換前後の文字化け。

今では文字化けっていうものは珍しくなりましたが、1990~2000年代初期までは文字化けっていうのは色々なウェブサイトを見ているとありましたので文字化けしていると思ったら都度、エンコーディングをメニューから変えていく必要がありましたね。

下記犯行文献(歴史的な背景の意味で)

あわせて読みたい
ANSIコードとSHIFT-JISコードって? お世話になります。 エディタを使っていて SHIFT-JISコードという文字コードの呼び方があるのを 聞いたのですが、ANSIコードとどう違うのですか? 全く見当はずれな質問...
Stack Overflow
ANSI vs SHIFT JIS vs UTF-8 in c# I have been trying to figure the difference for quite sometime now. The issue is with a file that is in ANSI encoding has japanese characters like: ­‚È‚­‚Æ‚à1‚Â...

テンポラリーファイルの画像を最適化

イラストで使っている画像を全て最適化=小さくしとく
これには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の圧縮値は自分で調整しましょう。

GitHub
GitHub - shssoichiro/oxipng: Multithreaded PNG optimizer written in Rust Multithreaded PNG optimizer written in Rust. Contribute to shssoichiro/oxipng development by creating an account on GitHub.

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に新しい投稿として貼り付けなければ行けないのでそれはまた別の話。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次