スクリーンショットを予め決めたサイズ、拡張子で保存することでストレージの圧迫を防ぎます.
※価格は記事執筆時のものです. 現在の価格はApp Storeから確認ください.
レビュー時のiOSバージョン : iOS15.5
スポンサーリンク
スクリーンショットの肥大化
スマホの画面画素数が大きくなるのは基本的にはよいことです.
しかしその画面でスクリーンショットを撮れば、カメラによる撮影ほどではないですが当然そのファイルサイズも大きくなります.
僕がメインで使用しているiPhone8でも100万画素、今となっては800画素を越えるスマホも存在します
そんなiPhone8で撮ったスクリーンショットも被写体次第ですが一枚で500KB前後になります、見た目は小さいですが気軽にサクサク撮ってたらそれなりの容量となりストレージを圧迫します.
SNSをはじめ目的次第ではもっと小さくても問題ありません、しかしスクリーンショットでの撮影はサイズ固定です.
というわけでリサイズや拡張子の操作などを合わせてショートカットに任せましょう.
(簡単な)方針
ショートカットでは「イメージを変換」と「イメージのサイズを変更」のアクションがあります.
スクリーンショットは画面画素数のサイズで撮影されるpng画像であるため、例えばjpegやgifにするだけでもサイズダウンできます.
加えてサイズを小さくすれば更にサイズを抑えることができます.
今回は拡張子をpng,jpegから選択、またサイズを100%(撮影時のまま)、90%、75%、50%に小さくする組み合わせを考えます.
項目が増えればそれだけ処理も遅くなります、これらは好みで変更しましょう.
レシピ
まず「スクリーンショットを撮る」で実行時のスクリーンショットを取得します.
この結果を"before"という変数にでも置きます.
またbeforeを今回はJPEGに変換しておきます.
画質やメタデータは好きに変更しましょう、画質が低いほどそれだけサイズダウンになりますがやりすぎるとボケボケで内容がわからなくなるため程々にします.
メタデータの削除はサイズダウンにはあまり貢献しませんがプライバシーの観点から一応削除した方がいいでしょう.
こうして変換した結果を"after"という変数にでも置きます.
続いて拡張し選択するためのリストと画像をリサイズするためのリストをそれぞれ追加しておきます.
特にリサイズの方はこの数字を後で使うので必ず半角数字にし、"%"も後で取り除くので全角半角を統一しておきます.
続いて拡張子やリサイズなどの情報を取得します.
リサイズ自体はもっと後で行います.
まず拡張子のリストに対して「各項目を繰り返す」を行います(今回は拡張子が2つなので実際には次のif文のみで十分です).
画像はpngの場合です.
拡張子の名前を"name"という変数に置き、リサイズ側のリストで「各項目を繰り返す」を追加します.
繰り返し項目2(2つあるリストの後者なので"2"が付きます)は例えば100%や75%といった情報なのでここから"%"を取り除けばリサイズの値となるのでこの結果を"percent"と置きます.
「イメージのサイズを変更」でイメージ"before"を上で取得した"percent"にリサイズし、その結果を変数"after"とでも置きます.
最後にこれらの変数name、percent、(afterの)幅・高さ・ファイルサイズを「テキスト」アクションで一列に整え、変数vに追加していきます.
こうして追加された変数vは、リサイズする拡張子とリサイズの倍率、縦横のサイズ、リサイズ後のファイルサイズ…の情報が配列となっていることになります.
これを「リストから選択」で一つ選択させ、倍率の値を取り出してリサイズすればOKというわけです.
同じ処理をJPEGに対して行います.
「イメージのサイズを変更」の対象が変数"before"から変数"after"に変わった以外は前者と同じです.
拡張子が増える場合は先頭で行った「イメージを変換」をif文や「各項目を繰り返す」などで行うことでアクション数を減らすことができますね、今回のやり方は処理自体は同じですがアクション数を考えると冗長なプログラムです.
「イメージを変換」で変換できる拡張子はPNGやJPEG以外にあと6種類ありますからね.
上でも書いたように、これらの処理で変数vには拡張子やリサイズの割合、縦横の値、そして変換後のファイルサイズのリストとなっているはずです.
そこで「リストから選択」で変数vから一つ選択させます.
「メニューから選択」で
- 指定(選択)したサイズにリサイズ
- (選択した操作を無視して)オリジナルを保存する
- レシピを終了する
から選択させます.
操作の手間を省くなら「メニューから選択」を無くしてリサイズの処理だけ行いましょう.
まずは選択した項目に従ってリサイズする場合です.
選択した項目は例えば
PNG(100%):2224×1669px:676KB
となっています.
ここからリサイズする倍率(例だと100)を取り出します.
まず「テキストを置き換え」で文字"%"以降を取り除くために、正規表現を使って
%.*
を空(灰色で"世界"となっている状態)に置き換えます.
続いてその結果を「一致するテキスト」で
[0-9]+
とします.
例の場合だと一つ目のアクションで"PNG(100%):2224×1669px:676KB"から"PNG(100)"となり、二つ目のアクションで100を得ます.
この結果を使って変数afterに対して「イメージのサイズを変更」でリサイズさせ、「写真アルバムに保存」でカメラロールに保存して完了します.
(画像で「イメージのサイズを変更」の対象を変数afterにするのを忘れてました)
残る「メニューから選択」の項目については、「オリジナルを保存する」の場合はスクリーンショットそのものである変数before自体をカメラロールに保存します.
「レシピを終了」の場合はこのレシピを停止します.
実行
実際に動かしてみます.
スクリーンショットが撮られた後、画像のように各拡張子やリサイズの組み合わせとそれに応じた画像サイズとファイルサイズを確認、選択できます.
(PNG,90%はオリジナルと変わらないか、むしろファイルサイズが大きくなることが多いです、そういうものなんでしょうかね)
選択した結果を確認しつつ、その結果で保存するか、やはりオリジナルを保存するか、どちらも行わないかを選択します.
前者二つの場合は対応するサイズ、拡張子によってカメラロールに保存されます.
実際に確認してみると拡張子もサイズもちゃんと変わっています.
〆
こうして作ったレシピをAssistiveTouchや背面タップから実行することが主な目的です.
最初のアクションを「写真を検索」+「写真を選択」にすることでカメラロールに保存済みの写真に対して同じ操作を行えます.
ただしその場合はオリジナルを残すかどうかの処理があった方が良さそうですね.