Beispiel #1
0
def make_images(root):
    import biplist
    config = biplist.readPlist(os.path.join(root, 'iOS image.plist'))
    outdir = os.path.join(root, config['lanunchimage_dir'])
    simple = os.path.join(root, config['lanunchimage_src'])
    is_portrait = config['lanunchimage_isPortrait']

    FS.cleanup_dir(outdir)
    is_crop_mode = config['lanunchimage_cropMode']
    if is_crop_mode:
        _make_clip_images(outdir, simple, is_portrait,
                          config['lanunchimage_cropAlign'])
    else:
        scale = config['lanunchimage_scale']
        bg_color = []
        for s in config['lanunchimage_bgColor'].split(','):
            bg_color.append(int(s.strip()))
        _make_logo_images(outdir, simple, is_portrait, tuple(bg_color), scale)
Beispiel #2
0
 def build(self, root, num_ac=1, num_ui=15, num_vc=10, num_md=8):
     FS.cleanup_dir(root)
     for i in range(num_md - 1):
         fname, hbody, mbody = self._oc_md(random.randint(6, 20))
         FS.write_text(os.path.join(root, fname + '.h'), hbody)
         FS.write_text(os.path.join(root, fname + '.mm'), mbody)
     for i in range(num_ui):
         fname, hbody, mbody = self._oc_ui(random.randint(3, 15),
                                           random.randint(1, 9))
         FS.write_text(os.path.join(root, fname + '.h'), hbody)
         FS.write_text(os.path.join(root, fname + '.mm'), mbody)
     for i in range(num_vc):
         fname, hbody, mbody = self._oc_vc(random.randint(3, 10),
                                           random.randint(1, 9))
         FS.write_text(os.path.join(root, fname + '.h'), hbody)
         FS.write_text(os.path.join(root, fname + '.mm'), mbody)
     for i in range(num_ac):
         fname, hbody, mbody = self._oc_ac(random.randint(0, 5),
                                           random.randint(0, 5))
         FS.write_text(os.path.join(root, fname + '.h'), hbody)
         FS.write_text(os.path.join(root, fname + '.mm'), mbody)
     self._oc_bridge(root)
Beispiel #3
0
def _build_ios(source, icon_dir):
    # ios icon 设计规则
    def get_design_rules():
        return {
            'App': {
                'iPhone': ['60@3x', '60@2x'],
                'iPad Pro': ['83.5@2x'],
                'iPad, iPad mini': ['76@1x', '76@2x'],
                'App Store': ['1024@1x']
            },
            'Spotlight': {
                'iPhone': ['40@3x', '40@2x'],
                'iPad Pro, iPad, iPad mini': ['40@2x']
            },
            'Settings': {
                'iPhone': ['29@3x', '29@2x'],
                'iPad Pro, iPad, iPad mini': ['29@2x']
            },
            'Notification': {
                'iPhone': ['20@3x', '20@2x'],
                'iPad Pro, iPad, iPad mini': ['20@2x']
            }
        }

    # ios icon 每种类型的生成概率
    def get_catalog_rate():
        return {
            'App': 100,
            'Spotlight': 60,
            'Settings': 60,
            'Notification': 60
        }

    # 转换名称
    def trans_idiom(devices):
        if 'iPhone' in devices:
            return 'iphone'
        if 'iPad' in devices:
            return 'ipad'
        if 'App Store' in devices:
            return 'ios-marketing'
        return devices

    # step1: clear
    FS.cleanup_dir(icon_dir)
    # step2: load template
    icon_rules = get_design_rules()
    icon_rates = get_catalog_rate()
    images = []
    for catalog in icon_rates:
        if icon_rates[catalog] < random.randint(1, 100):
            continue
        zone_dict = icon_rules[catalog]
        for device in zone_dict:
            idiom = trans_idiom(device)
            icon_size_list = zone_dict[device]
            for icon_size_desc in icon_size_list:
                parts = icon_size_desc.split('@')
                size_item = {
                    'size': '%sx%s' % (parts[0], parts[0]),
                    'idiom': idiom,
                    'filename': 'icon-%s.png' % icon_size_desc,
                    'scale': parts[1]
                }
                images.append(size_item)
    contents = {'images': images, 'info': {'version': 1, 'author': 'xcode'}}
    # step3: create icon
    srouce_icon = Image.open(source).convert("RGBA")
    assert srouce_icon.size[0] == srouce_icon.size[
        1], 'source icon must be a rectangle!'
    size_dict = {}  # 避免重复生成相同尺寸的图片
    name_list = []
    name_1024 = None
    for item in contents['images']:
        scale = float(item['scale'].split('x')[0])  # scale:2x
        size = float(item['size'].split('x')[0])  # size:20x20
        size = int(size * scale)
        if 1024 != size:
            name = size_dict.get(size)
            if not name:
                name = _rand_name(name_list) + '.png'
                size_dict[size] = name
                icon_image = srouce_icon.resize((size, size), Image.ANTIALIAS)
                icon_image.save(os.path.join(icon_dir, name))
        else:
            name = _rand_name(name_list) + '.png'  # 1024的不透明icon最后生成
            name_1024 = name
        item['filename'] = name
    # 去除1024的alpha通道
    if 1024 != srouce_icon.size[0]:
        srouce_icon = srouce_icon.resize((1024, 1024), Image.ANTIALIAS)
    icon_1024 = Image.new("RGB", (1024, 1024), (255, 255, 255))
    icon_1024.paste(srouce_icon, mask=srouce_icon.split()[3])
    icon_1024.save(os.path.join(icon_dir, name_1024), 'PNG')
    # 保存配置
    json_text = json.dumps(contents, indent='\t')
    FS.write_text(os.path.join(icon_dir, 'Contents.json'), json_text)
    print(json_text)