Edited at

iOSアプリに必要なアイコンを一括でリサイズするスクリプトを作った


はじめに

iOSアプリに必要なアイコンのサイズは非常に多く、GUIの画像編集ソフトを使って手動でリサイズするのは手間が掛かります。

そのため、何番煎じかはわかりませんが、一括でリサイズするスクリプトを実装しました。


環境


  • OS:macOS Mojave 10.14.3

  • FFmpeg:4.0.2


画像の前提条件


  • アスペクト比:1:1

    iOSアプリのアイコンは全て1:1のため

  • サイズ:1024x1024以上

    最も大きいアイコンのサイズが1024x1024のため

  • すでにアイコンとして完成されている

    単純に画像をリサイズするだけのスクリプトのため

  • FFmpegでサポートされているフォーマット


FFmpegのインストール

コマンドラインで画像をリサイズするために使います。

インストール方法はこちらの記事をご参照ください。


画像リサイズスクリプトの実装

必要なツールのインストールが完了したら、スクリプトを実装します。


resize_icon_for_ios.sh

#!/bin/bash

# ----------------------------------------
# 画像をiOSアプリのアイコン向けに一括でリサイズする
# 引数:画像ファイルパス(/path/to/*.*)
#    ファイル名のみ(*.*)だと「{画像ファイル名}」のフォルダが作成されない
# 出力:iOSアプリのアイコンセット(/path/to/{画像ファイル名}/*.*)
# 備考:画像は1:1で1024x1024以上が望ましい
# ----------------------------------------

# 引数の保持
readonly IMAGE_PATH=$1

function main () {
checkArgument
createIcon

exit
}

function createIcon () {
local readonly FILENAME_EXT=${IMAGE_PATH##*/}
local readonly FILENAME=${FILENAME_EXT%.*}
local readonly EXT=${FILENAME_EXT##*.}
local readonly FILE_PATH=${IMAGE_PATH%/*}
local readonly ICON_PATH="${FILE_PATH}/${FILENAME}/"

# 「{画像ファイル名}」のフォルダを作成して移動する
if [ ! -d ${ICON_PATH} ]; then
mkdir ${ICON_PATH}
fi
cd ${ICON_PATH}

# 画像をリサイズして保存する
# ffmpeg -i {元画像ファイルパス} -vf scale={サイズ} {出力画像ファイルパス}
ffmpeg -i ${IMAGE_PATH} -vf scale=1024:1024 "${FILENAME}_AppStore.${EXT}"
ffmpeg -i ${IMAGE_PATH} -vf scale=120:120 "${FILENAME}_iPhone_App@2x.${EXT}"
ffmpeg -i ${IMAGE_PATH} -vf scale=180:180 "${FILENAME}_iPhone_App@3x.${EXT}"
ffmpeg -i ${IMAGE_PATH} -vf scale=80:80 "${FILENAME}_iPhone_Spotlight@2x.${EXT}"
ffmpeg -i ${IMAGE_PATH} -vf scale=120:120 "${FILENAME}_iPhone_Spotlight@3x.${EXT}"
ffmpeg -i ${IMAGE_PATH} -vf scale=58:58 "${FILENAME}_iPhone_Settings@2x.${EXT}"
ffmpeg -i ${IMAGE_PATH} -vf scale=87:87 "${FILENAME}_iPhone_Settings@3x.${EXT}"
ffmpeg -i ${IMAGE_PATH} -vf scale=40:40 "${FILENAME}_iPhone_Notifications@2x.${EXT}"
ffmpeg -i ${IMAGE_PATH} -vf scale=60:60 "${FILENAME}_iPhone_Notifications@3x.${EXT}"
ffmpeg -i ${IMAGE_PATH} -vf scale=76:76 "${FILENAME}_iPad_App.${EXT}"
ffmpeg -i ${IMAGE_PATH} -vf scale=152:152 "${FILENAME}_iPad_App@2x.${EXT}"
ffmpeg -i ${IMAGE_PATH} -vf scale=167:167 "${FILENAME}_iPadPro_App@2x.${EXT}"
ffmpeg -i ${IMAGE_PATH} -vf scale=40:40 "${FILENAME}_iPad_Spotlight.${EXT}"
ffmpeg -i ${IMAGE_PATH} -vf scale=80:80 "${FILENAME}_iPad_Spotlight@2x.${EXT}"
ffmpeg -i ${IMAGE_PATH} -vf scale=29:29 "${FILENAME}_iPad_Settings.${EXT}"
ffmpeg -i ${IMAGE_PATH} -vf scale=58:58 "${FILENAME}_iPad_Settings@2x.${EXT}"
ffmpeg -i ${IMAGE_PATH} -vf scale=20:20 "${FILENAME}_iPad_Notifications.${EXT}"
ffmpeg -i ${IMAGE_PATH} -vf scale=40:40 "${FILENAME}_iPad_Notifications@2x.${EXT}"
}

function checkArgument () {
# 画像が存在しない、またはファイルでない場合、終了する
if [ ! -e ${IMAGE_PATH} ] || [ ! -f ${IMAGE_PATH} ]; then
echo "画像ファイルが不正です。"
exit
fi
}

main



アイコンの一括リサイズ

スクリプトの実装が完了したら、アイコンを一括でリサイズします。

スクリプトと画像ファイルはどこに置いてもいいですが、両方ともデスクトップに置くとやりやすいです。

今回は「logo.png」という画像ファイルを対象とします。

# sh resize_icon_for_ios.sh {画像ファイルパス}

$ sh resize_icon_for_ios.sh ~/Desktop/logo.png

処理が正常に完了すると、画像ファイルと同じ場所に画像ファイル名のフォルダが作成されます。

スクリーンショット 2019-07-03 2.13.49.png

フォルダを開くとアイコンが一括で作成されています。

スクリーンショット_2019-07-03_2_14_53.jpg

あとはアイコンをXcodeプロジェクトのアセットにドラッグ&ドロップすれば完了です。

スクリーンショット 2019-07-03 1.44.21.png


おわりに

これでアプリをたくさん作ったり、アイコンを頻繁に差し替えたりすることがあっても楽に乗り切れます:muscle:

シンプルなスクリプトなので、必要に応じてカスタマイズなどしてみてください!


参考リンク