9

Androidでさまざまな表示密度をサポートするポストリリースが必要です

開発中にdrawable-hdpiは160png(そのうちの20個は9パッチ)のアセットに成長しました

ここで、これらすべてのビットマップをmdpi、ldpiに変換する必要があります(LayoutInflaterでOOMが発生しないように、レイアウトとドローアブルXMLはすでに問題ありません)

それらすべてのビットマップをバッチで変換するのに適したツールはありますか?

4

7 に答える 7

14

これは、高解像度のものから低解像度の 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

'''
于 2012-09-28T13:15:51.123 に答える
5

Android Asset Studioは役に立つかもしれませんが、それはまさにあなたが求めていたものではありません。

于 2012-09-28T13:13:57.473 に答える
2

他の誰かがこの非常に優れたツールを作成しました。このツールは、iOS アセット、または所有している最高解像度の Android アセットから自動的にサイズ変更できます。

于 2014-02-07T08:14:46.690 に答える
1

これを見てください:

アップロードしてすべてのピクセルに戻すだけです。

http://romannurik.github.io/AndroidAssetStudio/nine-patches.html

于 2015-08-26T08:50:43.073 に答える