iOSアプリ用アイコンとAndroidアプリ用アイコンに一括リサイズするJavaScript for Automation

作った。

function openDocuments(docs) {
    for(var i = 0; i < docs.length; i++){
        var src = docs[i].toString();
        // iOS
        sips(  57, src, src + '_icons/ios', 'Icon.png');             //   57 x   57 for iPhone non-Retina -iOS6 App
        sips( 114, src, src + '_icons/ios', 'Icon@2x.png');          //  114 x  114 for iPhone Retina     -iOS6 App
        sips(  72, src, src + '_icons/ios', 'Icon-72.png');          //   72 x   72 for iPad   non-Retina -iOS6 App
        sips( 144, src, src + '_icons/ios', 'Icon-72@2x.png');       //  144 x  144 for iPad   Retina     -iOS6 App
        sips(  60, src, src + '_icons/ios', 'Icon-60@.png');         //   60 x   60 for iPhone non-Retina iOS7- App
        sips( 120, src, src + '_icons/ios', 'Icon-60@2x.png');       //  120 x  120 for iPhone Retina 2x  iOS7- App
        sips( 180, src, src + '_icons/ios', 'Icon-60@3x.png');       //  180 x  180 for iPhone Retina 3x  iOS7- App
        sips(  76, src, src + '_icons/ios', 'Icon-76.png');          //   76 x   76 for iPad   non-Retina iOS7- App
        sips( 152, src, src + '_icons/ios', 'Icon-76@2x.png');       //  152 x  152 for iPad   Retina 2x  iOS7- App
        sips( 228, src, src + '_icons/ios', 'Icon-76@3x.png');       //  228 x  228 for iPad   Retina 3x  iOS7- App
        sips(  29, src, src + '_icons/ios', 'Icon-Small.png');       //   29 x   29 for non-Retina -iOS6 Setting / Spotlight(iPhone)
        sips(  58, src, src + '_icons/ios', 'Icon-Small@2x.png');    //   58 x   58 for Retina 2x  -iOS6 Setting / Spotlight(iPhone)
        sips(  87, src, src + '_icons/ios', 'Icon-Small@3x.png');    //   87 x   98 for Retina 3x  -iOS6 Setting / Spotlight(iPhone)
        sips(  50, src, src + '_icons/ios', 'Icon-Small-50.png');    //   50 x   50 for non-Retina -iOS6 Spotlight(iPad)
        sips( 100, src, src + '_icons/ios', 'Icon-Small-50@2x.png'); //  100 x  100 for Retina     -iOS6 Spotlight(iPad)
        sips(  40, src, src + '_icons/ios', 'Icon-Small-40.png');    //   40 x   40 for non-Retina iOS7- Setting / Spotlight
        sips(  80, src, src + '_icons/ios', 'Icon-Small-40@2x.png'); //   80 x   80 for Retina 2x  iOS7- Setting / Spotlight
        sips( 120, src, src + '_icons/ios', 'Icon-Small-40@3x.png'); //  120 x  120 for Retina 3x  iOS7- Setting / Spotlight
        sips( 512, src, src + '_icons/ios', 'iTunesArtwork.png');    //  512 x  512 for non-Retina App Store
        sips(1024, src, src + '_icons/ios', 'iTunesArtwork@2x.png'); // 1024 x 1024 for Retina     App Store
        // Android
        sips( 48, src, src + '_icons/android/mipmap-ldpi', 'ic_launcher.png');    //  36 x  36 for ldpi Android App
        sips( 48, src, src + '_icons/android/mipmap-mdpi', 'ic_launcher.png');    //  48 x  48 for mdpi Android App
        sips( 72, src, src + '_icons/android/mipmap-hdpi', 'ic_launcher.png');    //  72 x  72 for hdpi Android App
        sips( 96, src, src + '_icons/android/mipmap-xhdpi', 'ic_launcher.png');   //  96 x  96 for xhdpi Android App
        sips(144, src, src + '_icons/android/mipmap-xxhdpi', 'ic_launcher.png');  // 144 x 144 for xxhdpi Android App
        sips(192, src, src + '_icons/android/mipmap-xxxhdpi', 'ic_launcher.png'); // 192 x 192 for xxxhdpi Android App
        sips(512, src, src + '_icons/android/', 'googleplaystore.png');           // 512 x 512 for Google Play Store
    }
    function sips(size, src, outPath, outFile){
        var app = Application.currentApplication();
        app.includeStandardAdditions = true;
        app.doShellScript('mkdir -p "' + outPath + '"');
        app.doShellScript('sips --resampleWidth ' + size + ' --out "' + outPath + '/' + outFile + '" "' + src + '"');
    }
}

Yosemite以降のMacスクリプトエディタを起動して、新規作成してJavaScriptに設定し、上記のコードをコピペ。それを「アプリケーション」というファイルフォーマットで書き出す。

https://farm1.staticflickr.com/665/21397056388_0b2cc281c0.jpg

あとは、できあがったファイルに、好きな画像ファイル(1024x1024以上を推奨)をドラッグアンドドロップして使う。

先日作ったやつiOS用だけだったけど、今回はAndroid用も出力するようにした。今回のスクリプトが前回のスクリプトを完全に置き換えるので、今後はこれだけ使えば良い。

まあiOSAndroidが完全に同じ1つの画像をリサイズするだけで生成できるとは思ってないけどね。形とか背景とかいろいろ仕様の違いがあるので。ただリサイズツールを複数作ってもややこしくなるので、全部の機能をまとめてみた。

ちなみに、Android用のアイコンは、「mipmap-」で始まるディレクトリを作ってそこに書き出す。昔は「drawable-」だったらしいけど、今回は新しい方にした。