<分区>
我需要发布后支持 Android 上的不同显示密度
在开发过程中,drawable-hdpi 已增长到 160 png(例如 20 个,其中 9 个补丁)
我现在需要将所有这些位图转换为 mdpi、ldpi(布局和可绘制对象 XML 已经很好,以避免在 LayoutInflater 上引发 OOM
是否有适合批量转换所有这些位图的工具?
<分区>
我需要发布后支持 Android 上的不同显示密度
在开发过程中,drawable-hdpi 已增长到 160 png(例如 20 个,其中 9 个补丁)
我现在需要将所有这些位图转换为 mdpi、ldpi(布局和可绘制对象 XML 已经很好,以避免在 LayoutInflater 上引发 OOM
是否有适合批量转换所有这些位图的工具?
最佳答案
这是一个简单的脚本,用于从高分辨率的 Android 可绘制对象创建低分辨率的 Android 可绘制对象。
例如,给定一批 -xhdpi 图像,它可以生成 -hdpi 和 -mdpi 图像。
使用此脚本,可以仅从创作工具中导出最高分辨率的图稿,然后使用一些批处理命令创建较低分辨率的版本。
脚本用法:
drawable_convert.py -d res/drawable-mdpi -d res/drawable-hdpi res/drawable-xhdpi-v14/*.png
这将从 xhdpi 获取每个 png 文件,并将较低分辨率的版本放入 mdpi 和 hdpi 文件夹中。
http://kmansoft.com/2012/05/23/scale-android-drawables-with-a-script/
original script, https://gist.github.com/2771791
脚本本身,以避免依赖于 github gist/原始博客文章。
名称 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
'''
关于android - 将android资源位图批量转换为不同密度的工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12640701/