Инструмент для пакетного преобразования растровых изображений ресурса android в разные плотности

Мне нужно, чтобы после релиза поддерживали разные плотности экрана на Android

Во время разработки drawable-hdpi вырос до 160 png (например, 20 из них 9 патчей)

Теперь мне нужно преобразовать все эти растровые изображения в mdpi, ldpi (макеты и чертежи XML уже прекрасны, чтобы избежать повышения OOM на LayoutInflater

Есть ли какой-либо инструмент, подходящий для преобразования всех этих растровых изображений в пакетном режиме?

Вот простой скрипт для создания графических элементов с низким разрешением для Android с более высоким разрешением.

Например, учитывая пакет изображений -xhdpi, он может генерировать изображения -hdpi и -mdpi.

С помощью этого сценария можно экспортировать только изображения с высоким разрешением из инструментов разработки, а затем создавать версии с низким разрешением с несколькими командами пакетной обработки.

Использование скрипта:

drawable_convert.py -d res/drawable-mdpi -d res/drawable-hdpi res/drawable-xhdpi-v14/*.png 

Это займет каждый png-файл из xhdpi и разместит версии с более низким разрешением в папках mdpi и hdpi.

http://kmansoft.com/2012/05/23/scale-android-drawables-with-a-script/
Оригинальный скрипт, https://gist.github.com/2771791


Сам скрипт, чтобы избежать зависимости от 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 ''' 

Android Asset Studio может быть полезной, хотя это не совсем то, о чем вы просили.

Final-Android-Resizer выполнил эту работу для меня и был прост в использовании, но у меня были все необходимые параметры: https://github.com/asystat/Final-Android-Resizer

Кто-то другой сделал это действительно приятным инструментом , который может автоматически изменяться как из iOS-активов, так и из любых активов Android с самым высоким разрешением.

Посмотри на это:

Просто загружайте и возвращайтесь во все пиксели.

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

Я создал инструмент, который может перезаписывать изображения разных типов (png, jpg, gif, svg, psd, 9-patch ..). Использует алгоритмы масштабирования качества hiqh и поддерживает некоторые инструменты сжатия без потерь, такие как pngcrush. Существует GUI и командной строки ui.

https://github.com/patrickfav/density-converter

Скриншот

В вашем случае вы должны установить коэффициент масштабирования источника равным 2 и проверить, что «skip upscaling» также устанавливает платформу для Android.

Intereting Posts
Структура данных, используемая для сообщений SMS в Android Android External Storage среди мобильных брендов Android: сравнить два объекта ArrayList и найти unmatching ids из второго массива ArrayList Как получить MarkerId в Artoolkitplus в android Запустить приложение, встряхнув телефон на основе вещания, прослушивающего соответствующее намерение, если это возможно? Как сохранить состояние фрагмента, имеющего listview Могу ли я получить некоторую эффективность, объявив соответствующих участников «статическими» в действии Android Обнаружение, когда роуминг отключен в Android Android: Как иметь общее меню в каждой (List) Activity без повторной записи переопределенных методов? Как узнать, был ли установлен вызов? Android WebView внутри ScrollView прокручивает только scrollview Реализовать индикатор активности вращения, аналогичный iOS в Android Как удобно работать в большом (Android) проекте? Что такое MediaStore.Images.Media.getContentUri (String volumeName): Ури? Скорость чтения тегов NFC