工具批量转换的Andr​​oid资源位图不同密度位图、密度、批量转换、不同

由网友(私藏你的快乐)分享简介:我需要释放后支持不同的显示密度在Android I need to post-release support different display densities on Android在开发过程中的绘制 - 华电国际已发展到160巴(如20人9补丁)资产During development drawable-h...

我需要释放后支持不同的显示密度在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.

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

'''
阅读全文

相关推荐

最新文章