adbird(広告鳥) 備忘録

スマホ(Android)のTermuxでGraphicsMagick(or ImageMagick)を使って複数の画像を一括縮小

※最終更新 : 2020年3月18日。



僕は通話専用のガラケーと、データ通信専用の格安スマホの2台持ちなのだが、スマホの通信プランは月1GB+前月までの残通信量(最大1GB)=ひと月、最大2GBという少ない通信量である。まあ、そのおかげでガラケースマホで合わせて月1,500円程度のコストなのだが。

それでも自宅ではWifiだし、外では動画などの大きい容量のデータのダウンロードや閲覧はしないようにしているので、前月の通信量が結構残ることが多く、特に困ることはない。

しかし、外出先でスマホで撮った写真をツイッターとかでアップロードしたいときもある。その日のうちに自宅に帰れるのなら、自宅に戻ってからアップすることもあるのだが、帰省中などWifiがない場合やすぐにアップしたいときに、少ない通信量しかない僕のプランではスマホの画像データの容量もバカにならない…。

そこで以前は、画像をリサイズできるアプリを使って、1枚ずつ縮小してからアップしていたのだが、これが結構手間だった。 とくに1回の投稿で複数枚の画像をアップするときなど。

複数の画像を一括で縮小できるアプリもあるっぽいみたいだったが、ふと、「スマホでも端末(ターミナル)開いて、Imagemagick の mogrify で一括縮小できないかなぁ」と思って調べたら、Termux というAndroidLinuxコマンドが使える端末アプリがあるじゃないですか!!

そして、ついに比較的簡単(?)に複数枚の画像を一括縮小する環境を作ることができた。

準備編

Termux インストール

  • Termuxをインストール。
    • Google Playでダウンロードする場合、Termux自体は無料だが、後述の Termux:Widget は有料になる。Termux:Widget はあれば便利というものなので、必ず必要というものではない。
    • F-Droidでダウンロードする場合、Termux:Widget も無料。ただし、インストールの際にセキュリティ関連の警告が出るので、諸々自己責任で…。F-Droid経由でダウンロード・インストールする場合は、まずはF-Droid自体をインストールすることが推奨されてている。そうしないと、アプリの更新の通知が来ないので。

※注意!:Google PlayでTermuxをインストールしたら、Termux:Widget などのTermux関連のアプリも全部、Google Play経由でインストールすること。逆にF-DroidでTermuxをインストールしたら、その他のTermux関連アプリは全部、F-Droid経由でインストールすること。混ぜるな危険!らしい。

Termuxを起動すると、こんな感じ。

f:id:adbird:20181229133957p:plain
Temux

おぉ、端末(ターミナル)だ!
とりあえず、下記のことをすべし。

$ pkg update
$ pkg upgrade
$ termux-setup-storage

最後のコマンドで「アクセスを許可しますか?」と聞かれたら、許可をする。

tree インストール

端末で困るのは、現在の自分の場所がどこなのか、自分がいる場所はどんなフォルダ・ファイル構成になっているのがわかりづらいこと。

自分の場所を知るには下記コマンドで分かる。

$ pwd

自分がいる場所のフォルダ・ファイル構成は $ tree で分かる。

$ pkg install tree

でインストールして、

$ tree

で、フォルダ構造が表示される。
後述するように、ファイルの確認でも使う。

GraphicsMagick または ImageMagick をインストール

お好みでGraphicsMagickまたはImageMagickをインストールする。

$ pkg install graphicsmagick

または

$ pkg install imagemagick

GraphicsMagickはImageMagickより画像変換速度が速い。ただし、本当かどうかは分からないが、画質はImageMagickの方がいいという情報も。

作業フォルダ(「画像リサイズ」)作成

~/storage/pictures/ の場所が、スマホ内部のどこに当てられているかを確認。

$ tree

たぶん、「本体(内部) > Pictures」(/storage/emulated/0/Pictures)になっていると思う。

「本体(内部) > Pictures」内に移動して、「画像リサイズ」フォルダを作成、確認する。

$ cd ~/storage/pictures/
$ mkdir 画像リサイズ
$ tree -L 1

一応、スマホの適当なファイルマネージャーで「本体(内部) > Pictures」を開いて見たときと、上記の $ tree -L 1 で表示された構成と同じになっているか(「画像リサイズ」フォルダがあるか)を確認する。

ホームに戻る。

$ cd

スクリプトファイル作成

スマホの小さい画面の端末でいちいち $ cd で画像の入っている目的のフォルダまで移動してから一括縮小のコマンドを打つ、なんてことはしたくない。
termux を開いて、すぐにコマンド一発で縮小できるようにしたい!ということでスクリプトファイルを作成。

次の2つのスクリプトを作成(スクリプトの名前は任意でOK)。

  • resize.sh : スクリプトを実行するだけで、スマホのカメラで撮影した画像を縮小できる。ただし、縮小されるのは現在の日付の画像のみ
  • resize2.sh : ファイルマネージャーを立ち上げて、画像をその都度、手作業で移動させてからスクリプトを実行して、画像を縮小する場合。

resize.sh

スマホスクリプトを書いてもいいけど、キーボードを使えるパソコンで書いたほうが速いので、パソコンで作った。(Windowsの場合、文字コードUTF-8にしたほうがいいかも。) 今回は縮小サイズを50%とした。縮小割合はお好みで。

#!/data/data/com.termux/files/usr/bin/sh
cp ~/storage/dcim/Camera/IMG_$(date +%Y%m%d)_*.jpg ~/storage/pictures/画像リサイズ
cd ~/storage/pictures/画像リサイズ
gm mogrify -resize 50% *.jpg

内容はスマホの環境によってだいぶ変わると思うので、ご自身の環境に合わせて書き換えてください。

※ ImageMagickの方を使う場合は、gm mogrify -resize 50% *.jpg のところを mogrify -resize 50% *.jpg にする。

各行の説明は以下の通り。

  • cp ~/storage/dcim/Camera/IMG_$(date +%Y%m%d)_*.jpg ~/storage/pictures/画像リサイズ
    • ~/storage/dcim/Camera/ 内に入っている、現在の日時の入っている画像ファイルを、上述の「画像リサイズ」フォルダにコピー。
    • 僕のスマホはカメラで撮った画像が ~/storage/dcim/Camera/ の中に IMG_20191211_214724.jpg というような名前で保存される。つまり、画像ファイル名の真ん中が撮影した日付になっている。それを利用して、IMG_$(date +%Y%m%d)_*.jpg とすることで、現在の日付の画像ファイルだけを選んでコピーできる。
    • もし、画像ファイル名に日付が入らない場合は、このスクリプトは使えないかも…。
  • cd ~/storage/pictures/画像リサイズ
    • 「画像リサイズ」フォルダに移動。
  • gm mogrify -resize 50% *.jpg
    • GraphicsMagickで、そのフォルダ内にある画像をすべて50%縮小する。

resize2.sh

#!/data/data/com.termux/files/usr/bin/sh
cd ~/storage/pictures/画像リサイズ
gm mogrify -resize 50% *.jpg
  • cd ~/storage/pictures/画像リサイズ
    • 「画像リサイズ」フォルダに移動。
  • gm mogrify -resize 50% *.jpg
    • GraphicsMagickで、そのフォルダ内にある画像をすべて50%縮小する。

※ ImageMagickの方を使う場合は、gm mogrify -resize 50% *.jpg のところを mogrify -resize 50% *.jpg にする。

スクリプトを移動させる

作成した resize.sh をグーグルドライブ経由(べつにグーグルドライブでなくてもいい。メールで添付とかでも。)でスマホにダウンロードしたら、「Downloads」フォルダにあるはずなので、termuxでダウンロードフォルダに移動。

$ cd ~/storage/downloads

resize.shがあるかを確認。

$ tree

resize.sh、resize2.shがあることを確認したら、以下のようにresize.shとresize2.shを /bin フォルダにコピー。

$ cp resize.sh $PREFIX/bin/resize.sh
$ cp resize2.sh $PREFIX/bin/resize2.sh

実行権限を与える。

$ cd $PREFIX/bin
$ chmod +rx resize.sh
$ chmod +rx resize2.sh

実行権限が与えられえているか確認する。

$ ls -l resize.sh
$ ls -l resize2.sh

で、-rwx-- となっていればOK。

これで準備終わり。一度、termuxを閉じるか、$ cd でホームに戻る。

実行編(コマンド入力の場合)

撮影した当日に画像を縮小する場合

(そもそもカメラで撮影した画像のファイル名に日付が入ることを前提に resize.sh を作成しているので、スマホによってはこの方法は使えない可能性もある。)

スマホのカメラで写真を撮った後、termuxを起動してスクリプトを実行。

$ resize.sh

実行中は何も表示されなくて不安になるけど、じっと待つw。

端末に再び「$」が表示されれば、「画像リサイズ」フォルダ内に縮小された画像が入っている。

Termuxをちゃんと

$ exit

で終了させれば、入力コマンドが履歴として残るので、次回からはTermuxを起動させて「↑」を押せば、すぐに $ resize.sh が実行できる。

撮影した翌日以降に画像を縮小する場合

ファイルマネージャー等で、スマホで撮った画像データを「画像リサイズ」フォルダにコピーする。

Yahoo!ファイルマネージャーが、目的のフォルダをスマホのホーム画面にショートカットとして置けるし、画面を2分割してドラッグ&ドロップできるし便利な感じ。

f:id:adbird:20181229125945p:plain

termuxを起動して、スクリプト実行。

$ resize2.sh

端末に再び「$」が表示されれば、「画像リサイズ」フォルダ内の画像が縮小されている。

繰り返しになるが、Termuxをちゃんと

$ exit

で終了させれば、入力コマンドが履歴として残るので、次回からはTermuxを起動させて「↑」を押せば、すぐに $ resize2.sh が実行できる。

僕の貧弱なスマホのスペックではわずか数枚の縮小にも結構、時間がかかった…。

あまり大量に一括縮小するのは時間がかかりすぎるので止めておいたほうがいいかも。

GraphicsMagickを使うことで変換時間が速くなった!

追記:実行編(ウェジェットでコマンド要らずで実行)

いちいちTermux起動して、入力履歴にあるとはいえ、コマンドを入れて…が面倒…。

スマホのホーム画面にスクリプトのショートカットアイコンを置いて、それをタップするだけで画像縮小できないだろうか…?と思って調べたら、できた!

Termux:Widget をインストール

Termux:WidgetGoogle PlayまたはF-Droidからインストール。

注意!:冒頭でも述べたように、Google PlayでTermuxをインストールしたら、Termux:Widget などのTermux関連のアプリも全部、Google Play経由でインストールすること。
逆にF-DroidでTermuxをインストールしたら、その他のTermux関連アプリは全部、F-Droid経由でインストールすること。

ちなみに僕のはF-Droid版。

スクリプトウィジェットに登録

正しい説明はTermux:Widget - Termux Wikiを参照のこと。

Termuxを起動して、$HOMEに「.shortcuts」フォルダを作成。

$ mkdir -p $HOME/.shortcuts

前述の resize.sh と resize2.sh が「ダウンロード」フォルダ内に残っているという前提で、その「downloads」フォルダに移動(下記の1行目)して、resize.sh と resize2.sh を上記の「.shortcuts」フォルダにコピー(2・3行目)、実行権限を与える(4・5行目)。

$ cd storage/downloads
$ cp resize.sh $HOME/.shortcuts/resize.sh
$ cp resize2.sh $HOME/.shortcuts/resize2.sh
$ chmod +x $HOME/.shortcuts/resize.sh
$ chmod +x $HOME/.shortcuts/resize2.sh

実行権限がちゃんと変わったかを確認したい場合は、下記の結果に「x」が含まれていればOK。

$ ls -l $HOME/.shortcuts/resize.sh
$ ls -l $HOME/.shortcuts/resize2.sh

Termuxを終了させる。

$ exit

スマホのホーム画面にショートカットのメニュー一覧またはアイコンを置く。

スマホによって設定が違うだろうけど、僕のスマホの場合は、ホーム画面の空いているところを長押しすると、ウィジェットを設定する画面が出てくるので、その中から Termux:Widget のウェジェットを探して、スクリプトメニュー一覧か、ショートカットアイコンを選択。画像はショートカットアイコンを置いた場合のもの。

f:id:adbird:20200318022710j:plain

これでアイコンをタップするだけで、画像が縮小できる!

撮影した当日に画像を縮小する場合は、カメラで撮影した後、「resize.sh」のアイコンをタップ。

撮影した翌日以降に画像を縮小する場合は、ファイルマネージャー等で、スマホで撮った画像データを「画像リサイズ」フォルダにコピーして、「resize2.sh」のアイコンをタップ。

撮影した当日に「resize.sh」のアイコンをタップして、さらに縮小したい場合、「resize2.sh」のアイコンをタップという組合せ技も可能。