Mar*_*era 9 android resolution bitmap android-layout android-resources
我需要在Android上发布后支持不同的显示密度
在开发过程中,drawable-hdpi已经增长到160 png(就像其中的20个9补丁)资产
我现在需要将所有这些位图转换为mdpi,ldpi(布局和drawables XML已经很好了,以避免在LayoutInflater上引发OOM
有没有适合批量转换所有这些位图的工具?
Sab*_*ado 15
这是一个简单的脚本,可以从更高分辨率的Android绘图中创建更低分辨率的Android绘图.
例如,给定一批-xhdpi图像,它可以生成-hdpi和-mdpi图像.
使用此脚本,可以仅从创作工具导出最高分辨率的图稿,然后使用一些批处理命令创建较低分辨率的版本.
脚本用法:
drawable_convert.py -d res/drawable-mdpi -d res/drawable-hdpi res/drawable-xhdpi-v14/*.png
Run Code Online (Sandbox Code Playgroud)
这将从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 /原始blogpost.
名称为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
'''
Run Code Online (Sandbox Code Playgroud)