打包ios自動(dòng)生成icon

用python生成ios要用到的icon圖片
pip install Image

#!/usr/bin/env python
# -*- encoding: utf-8 -*-


import os
import sys
import json
import argparse
from PIL import Image


def generate_icon_images(icon_filename):
    sizes = [20, 29, 40, 60, 50, 57, 58, 72, 76, 80, 87, 100, 114, 120, 144, 152, 167, 180, 1024]
    image_name = icon_filename
    contents = {
        "info": {
            "version": 1,
            "author": "apsl"
        }
    }

    if os.path.isfile(image_name) is False:
        sys.exit("Missing {0} file".format(image_name))

    img = Image.open(image_name)

    # Check image size
    if img.size < (1024, 1024):
        sys.exit("{0} size is {1}. Must be 1024x1024 or higher.".format(image_name, img.size))

    # Create Assets folder
    current_dir = os.getcwd()
    asset_dir = "{0}/Assets.appiconset".format(current_dir)
    if not os.path.exists(asset_dir):
        os.makedirs(asset_dir)
    os.chdir(asset_dir)
    print asset_dir

    # Generate images
    images = []
    for size in sizes:
        i = img.resize((size, size), Image.ANTIALIAS)
        img_filename = "Icon{0}.png".format(size)
        i.save(img_filename, format="PNG")
        if size == 29:
            asset_entry = {
                "size": "29x29",
                "idiom": "iphone",
                "scale": "1x",
                "filename": img_filename
            }
            images.append(asset_entry)
            asset_entry = {
                "size": "29x29",
                "idiom": "ipad",
                "scale": "1x",
                "filename": img_filename
            }
            images.append(asset_entry)
        elif size == 40:
            asset_entry = {
                "size": "40x40",
                "idiom": "ipad",
                "scale": "1x",
                "filename": img_filename
            }
            images.append(asset_entry)
        elif size == 50:
            asset_entry = {
                "size": "50x50",
                "idiom": "ipad",
                "scale": "1x",
                "filename": img_filename
            }
            images.append(asset_entry)
        elif size == 57:
            asset_entry = {
                "size": "57x57",
                "idiom": "iphone",
                "scale": "1x",
                "filename": img_filename
            }
            images.append(asset_entry)
        elif size == 58:
            asset_entry = {
                "size": "29x29",
                "idiom": "iphone",
                "scale": "2x",
                "filename": img_filename
            }
            images.append(asset_entry)
            asset_entry = {
                "size": "29x29",
                "idiom": "ipad",
                "scale": "2x",
                "filename": img_filename
            }
            images.append(asset_entry)
        elif size == 72:
            asset_entry = {
                "size": "72x72",
                "idiom": "ipad",
                "scale": "1x",
                "filename": img_filename
            }
            images.append(asset_entry)
        elif size == 76:
            asset_entry = {
                "size": "76x76",
                "idiom": "ipad",
                "scale": "1x",
                "filename": img_filename
            }
            images.append(asset_entry)
        elif size == 80:
            asset_entry = {
                "size": "40x40",
                "idiom": "iphone",
                "scale": "2x",
                "filename": img_filename
            }
            images.append(asset_entry)
            asset_entry = {
                "size": "40x40",
                "idiom": "ipad",
                "scale": "2x",
                "filename": img_filename
            }
            images.append(asset_entry)
        elif size == 87:
            asset_entry = {
                "size": "29x29",
                "idiom": "iphone",
                "scale": "3x",
                "filename": img_filename
            }
            images.append(asset_entry)
        elif size == 100:
            asset_entry = {
                "size": "50x50",
                "idiom": "ipad",
                "scale": "2x",
                "filename": img_filename
            }
            images.append(asset_entry)
        elif size == 114:
            asset_entry = {
                "size": "57x57",
                "idiom": "iphone",
                "scale": "2x",
                "filename": img_filename
            }
            images.append(asset_entry)
        elif size == 120:
            asset_entry = {
                "size": "40x40",
                "idiom": "iphone",
                "scale": "3x",
                "filename": img_filename
            }
            images.append(asset_entry)
            asset_entry = {
                "size": "60x60",
                "idiom": "iphone",
                "scale": "2x",
                "filename": img_filename
            }
            images.append(asset_entry)
        elif size == 144:
            asset_entry = {
                "size": "72x72",
                "idiom": "ipad",
                "scale": "2x",
                "filename": img_filename
            }
            images.append(asset_entry)
        elif size == 152:
            asset_entry = {
                "size": "76x76",
                "idiom": "ipad",
                "scale": "2x",
                "filename": img_filename
            }
            images.append(asset_entry)
        elif size == 180:
            asset_entry = {
                "size": "60x60",
                "idiom": "iphone",
                "scale": "3x",
                "filename": img_filename
            }
            images.append(asset_entry)

    contents["images"] = images
    file = open("Contents.json", "w")
    file.write(json.dumps(contents))
    file.close()


def generate_launch_image(image_name):
    # 1334x750 not available yet, see: http://stackoverflow.com/a/26275887/1034126
    sizes = [(1242, 2208), (2208, 1242), (750, 1334), (640, 1136), (640, 960)]
    contents = {
        "info": {
            "version": 1,
            "author": "apsl"
        }
    }

    if os.path.isfile(image_name) is False:
        sys.exit("Missing {0} file".format(image_name))

    img = Image.open(image_name)

    # Check image size
    if img.size < (1242, 2208):
        sys.exit("{0} size is {1}. Must be 1242x2208 or higher.".format(image_name, img.size))

    # Create Assets folder
    current_dir = os.getcwd()
    asset_dir = "{0}/LaunchImage.launchimage".format(current_dir)
    if not os.path.exists(asset_dir):
        os.makedirs(asset_dir)
    os.chdir(asset_dir)
    print asset_dir

    # Generate images
    images = []
    for size in sizes:
        i = img.resize(size, Image.ANTIALIAS)
        img_filename = "launchimage{0}x{1}.png".format(size[0], size[1])
        i.save(img_filename, format="PNG")
        if size == (1242, 2208):
            asset_entry = {
                "extent": "full-screen",
                "idiom": "iphone",
                "subtype": "736h",
                "minimum-system-version": "8.0",
                "orientation": "portrait",
                "scale": "3x",
                "filename": img_filename
            }
        elif size == (2208, 1242):
            asset_entry = {
                "orientation": "landscape",
                "idiom": "iphone",
                "extent": "full-screen",
                "minimum-system-version": "8.0",
                "subtype": "736h",
                "scale": "3x",
                "filename": img_filename
            }
        elif size == (750, 1334):
            asset_entry = {
                "extent": "full-screen",
                "idiom": "iphone",
                "subtype": "667h",
                "minimum-system-version": "8.0",
                "orientation": "portrait",
                "scale": "2x",
                "filename": img_filename
            }
        elif size == (640, 1136):
            asset_entry = {
                "orientation": "portrait",
                "idiom": "iphone",
                "extent": "full-screen",
                "minimum-system-version": "7.0",
                "subtype": "retina4",
                "scale": "2x",
                "filename": img_filename
            }
            images.append(asset_entry)
            asset_entry = {
                "orientation": "portrait",
                "idiom": "iphone",
                "extent": "full-screen",
                "subtype": "retina4",
                "scale": "2x",
                "filename": img_filename
            }
        elif size == (640, 960):
            asset_entry = {
                "orientation": "portrait",
                "idiom": "iphone",
                "extent": "full-screen",
                "minimum-system-version": "7.0",
                "scale": "2x",
                "filename": img_filename
            }
            images.append(asset_entry)
            asset_entry = {
                "orientation": "portrait",
                "idiom": "iphone",
                "extent": "full-screen",
                "scale": "2x",
                "filename": img_filename
            }
        images.append(asset_entry)

    contents["images"] = images
    file = open("Contents.json", "w")
    file.write(json.dumps(contents))
    file.close()


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description="Assets generator for iOS projects")
    parser.add_argument("--launchimage",
                        help="Generate launch image assets")
    parser.add_argument("--icon",
                        help="Generate icons assets")
    parser.parse_args()
    args = parser.parse_args()
    if args.launchimage:
        print "Generating launch image with image {0}".format(args.launchimage)
        generate_launch_image(args.launchimage)
    if args.icon:
        print "Generating icons with image {0}".format(args.icon)
        generate_icon_images(args.icon)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末恋追,一起剝皮案震驚了整個(gè)濱河市史汗,隨后出現(xiàn)的幾起案子躬存,更是在濱河造成了極大的恐慌享钞,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,207評(píng)論 6 521
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件恋拍,死亡現(xiàn)場(chǎng)離奇詭異嘀粱,居然都是意外死亡迁匠,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,455評(píng)論 3 400
  • 文/潘曉璐 我一進(jìn)店門(mén)番刊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)含鳞,“玉大人,你說(shuō)我怎么就攤上這事芹务〔醣粒” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 170,031評(píng)論 0 366
  • 文/不壞的土叔 我叫張陵枣抱,是天一觀的道長(zhǎng)熔吗。 經(jīng)常有香客問(wèn)我,道長(zhǎng)佳晶,這世上最難降的妖魔是什么桅狠? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,334評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上中跌,老公的妹妹穿的比我還像新娘咨堤。我一直安慰自己,他們只是感情好漩符,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,322評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布一喘。 她就那樣靜靜地躺著,像睡著了一般嗜暴。 火紅的嫁衣襯著肌膚如雪凸克。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,895評(píng)論 1 314
  • 那天灼伤,我揣著相機(jī)與錄音触徐,去河邊找鬼。 笑死狐赡,一個(gè)胖子當(dāng)著我的面吹牛撞鹉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播颖侄,決...
    沈念sama閱讀 41,300評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼鸟雏,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了览祖?” 一聲冷哼從身側(cè)響起孝鹊,我...
    開(kāi)封第一講書(shū)人閱讀 40,264評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎展蒂,沒(méi)想到半個(gè)月后又活,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,784評(píng)論 1 321
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡锰悼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,870評(píng)論 3 343
  • 正文 我和宋清朗相戀三年柳骄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片箕般。...
    茶點(diǎn)故事閱讀 40,989評(píng)論 1 354
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡耐薯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出丝里,到底是詐尸還是另有隱情曲初,我是刑警寧澤,帶...
    沈念sama閱讀 36,649評(píng)論 5 351
  • 正文 年R本政府宣布杯聚,位于F島的核電站臼婆,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏幌绍。R本人自食惡果不足惜目锭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,331評(píng)論 3 336
  • 文/蒙蒙 一评汰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧痢虹,春花似錦被去、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,814評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至丰捷,卻和暖如春坯墨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背病往。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,940評(píng)論 1 275
  • 我被黑心中介騙來(lái)泰國(guó)打工捣染, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人停巷。 一個(gè)月前我還...
    沈念sama閱讀 49,452評(píng)論 3 379
  • 正文 我出身青樓耍攘,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親畔勤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蕾各,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,995評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容