Androidでさまざまな表示密度をサポートするポストリリースが必要です
開発中にdrawable-hdpiは160png(そのうちの20個は9パッチ)のアセットに成長しました
ここで、これらすべてのビットマップをmdpi、ldpiに変換する必要があります(LayoutInflaterでOOMが発生しないように、レイアウトとドローアブルXMLはすでに問題ありません)
それらすべてのビットマップをバッチで変換するのに適したツールはありますか?
Androidでさまざまな表示密度をサポートするポストリリースが必要です
開発中にdrawable-hdpiは160png(そのうちの20個は9パッチ)のアセットに成長しました
ここで、これらすべてのビットマップをmdpi、ldpiに変換する必要があります(LayoutInflaterでOOMが発生しないように、レイアウトとドローアブルXMLはすでに問題ありません)
それらすべてのビットマップをバッチで変換するのに適したツールはありますか?
これは、高解像度のものから低解像度の 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/
オリジナル スクリプト、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 Asset Studioは役に立つかもしれませんが、それはまさにあなたが求めていたものではありません。
他の誰かがこの非常に優れたツールを作成しました。このツールは、iOS アセット、または所有している最高解像度の Android アセットから自動的にサイズ変更できます。
これを見てください:
アップロードしてすべてのピクセルに戻すだけです。
http://romannurik.github.io/AndroidAssetStudio/nine-patches.html