工具批量转换的Andr​​oid资源位图不同密度 [英] Tool to batch convert android resource bitmaps to different densities

查看:111
本文介绍了工具批量转换的Andr​​oid资源位图不同密度的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要释放后支持不同的显示密度在Android

I need to post-release support different display densities on Android

在开发过程中的绘制 - 华电国际已发展到160巴(如20人9补丁)资产

During development drawable-hdpi has grown to 160 png (like 20 of them 9 patch) assets

我现在需要所有这些位图转换为 MDPI,LDPI (布局和可绘XML已经很好,以避免LayoutInflater提高OOM

I now need to convert all those bitmaps to mdpi, ldpi (layouts and drawables XML are already fine, to avoid raising OOM on LayoutInflater

有没有合适的工具,在批处理所有这些位图转换?

Is there any tool suitable to convert all those bitmaps in batch ?

推荐答案

下面是一个简单的脚本来创建较低分辨率的Andr​​oid从更高分辨率的那些可绘制。

Here is a simple script to create lower-resolution Android drawables from higher-resolution ones.

例如,给定批次-xhdpi图像,则可以生成-hdpi和-mdpi图像。

For example, given a batch of -xhdpi images, it can generate -hdpi and -mdpi images.

通过这个脚本,它可以从创作工具仅导出分辨率最高的作品,然后用一些批处理命令创建低分辨率的版本。

With this script, it’s possible to export only highest-resolution artwork from authoring tools and then create the lower-resolution versions with a few batch commands.

脚本使用:

drawable_convert.py -d res/drawable-mdpi -d res/drawable-hdpi res/drawable-xhdpi-v14/*.png

这将采取一切png文件从xhdpi并把低分辨率版本为MDPI和HDPI文件夹。

This will take every png file from xhdpi and place lower-resolution versions into mdpi and hdpi folders.

<一个href="http://kmansoft.com/2012/05/23/scale-android-drawables-with-a-script/">http://kmansoft.com/2012/05/23/scale-android-drawables-with-a-script/
原始脚本,https://gist.github.com/2771791

脚本本身,以避免依赖性在GitHub要点/原博文。
名称 drawable_convert.py

Script itself, to avoid dependency on github gist/original blogpost.
name drawable_convert.py

#!/usr/bin/python

import sys
import argparse
import os
import re

'''
A simple script to create lower-resolution Android drawables from higher-resolution ones.

For example, given a batch of -xhdpi images, you can generate -hdpi and -mdpi images.

This makes it possible to only export highest-resolution artwork from image authoring tools, and
automate the rest.

Usage:

   drawable_convert.py -d res/drawable-mdpi -d res/drawable-hdpi res/drawable-xhdpi-v14/select*.png

   ... will take select*.png from xhdpi and place versions into mdpi and hdpi folders.

   Correct resize ratios are computed based on resource directory names.

   Actual scaling is done by ImageMagick's convert command.
'''

class Converter:
    def __init__(self, dstList):
        print u'Dst list: {0}'.format(dstList)
        self.mDstList = dstList

    def convert(self, src):
        for dstpath in self.mDstList:
            (srcpath, srcname) = os.path.split(src)
            dst = os.path.join(dstpath, srcname)
            self.convertOne(src, dst)

    def convertOne(self, src, dst):
        print u'\n*****\n{0} to {1}\n*****\n'.format(src, dst)
        '''
        Determine relative density
        '''
        srcDpi = self.getDpi(src)
        dstDpi = self.getDpi(dst)

        if srcDpi < dstDpi:
            print u'NOT converting from {0}dpi to {1}dpi'.format(srcDpi, dstDpi)
        else:
            factor = dstDpi*100/srcDpi
            print u'Converting from {0}dpi to {1}dpi, {2}%'.format(srcDpi, dstDpi, factor)
            cmd = u'convert -verbose "{0}" -resize "{2}%x{2}%" "{1}"'.format(src, dst, factor)
            os.system(cmd)

    def getDpi(self, f):
        p = os.path.dirname(f)
        if re.match('.*drawable.*\\-mdpi.*', p):
            return 160
        elif re.match('.*drawable.*\\-hdpi.*', p):
            return 240
        elif re.match('.*drawable.*\\-xhdpi.*', p):
            return 320
        else:
            raise ValueError(u'Cannot determine densitiy for {0}'.format(p))

if __name__ == "__main__":
    '''
    Parse command line arguments
    '''
    parser = argparse.ArgumentParser(description='Converts drawable resources in Android applications')
    parser.add_argument('-d', dest='DST', action='append', required=True, help='destination directory')
    parser.add_argument('src', nargs='+', help='files to convert (one or more)')
    args = parser.parse_args()

    cv = Converter(args.DST)
    for src in args.src:
        cv.convert(src)


'''


if [ $# -lt 1 ] ; then
    echo "Usage: $0 file_list"
    exit 1
fi

for f in $*
do
    echo "File: ${f}"
    convert -verbose "${f}" -resize "75%x75%" "../drawable-hdpi/${f}"
    convert -verbose "${f}" -resize "50%x50%" "../drawable-mdpi/${f}"
done

'''

这篇关于工具批量转换的Andr​​oid资源位图不同密度的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆