item - Herramienta para convertir por lotes mapas de bits de recursos de Android a diferentes densidades
scale bitmap android xml (6)
Necesito soporte post-lanzamiento para diferentes densidades de visualización en Android
Durante el desarrollo drawable-hdpi ha crecido a 160 png (como 20 de ellos 9 parches) activos
Ahora necesito convertir todos esos mapas de bits a mdpi, ldpi (los diseños y los XML dibujables ya están bien, para evitar generar OOM en LayoutInflater
¿Hay alguna herramienta adecuada para convertir todos esos mapas de bits en lotes?
Aquí hay una secuencia de comandos simple para crear productos de Android de menor resolución a partir de los de mayor resolución.
Por ejemplo, dado un lote de imágenes -xhdpi, puede generar imágenes -hdpi y -mdpi.
Con esta secuencia de comandos, es posible exportar solo obras de arte de alta resolución de las herramientas de autoría y luego crear las versiones de menor resolución con algunos comandos por lotes.
Uso de scripts:
drawable_convert.py -d res/drawable-mdpi -d res/drawable-hdpi res/drawable-xhdpi-v14/*.png
Esto tomará cada archivo png de xhdpi y colocará versiones de menor resolución en las carpetas mdpi y hdpi.
http://kmansoft.com/2012/05/23/scale-android-drawables-with-a-script/
script original, https://gist.github.com/2771791
Script en sí, para evitar la dependencia de github gist / blogpost original.
nombre 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 puede ser útil, aunque no es exactamente lo que usted solicitó.
Alguien más hizo esta herramienta realmente agradable , que puede cambiar el tamaño automáticamente de los activos de iOS o de los activos de Android de mayor resolución que tengas.
Final-Android-Resizer hizo el trabajo por mí y era fácil de usar, pero tenía todas las opciones que necesitaba: https://github.com/asystat/Final-Android-Resizer
Mira este:
solo cargue y regrese a todos los píxeles.
http://romannurik.github.io/AndroidAssetStudio/nine-patches.html
Creé una herramienta que puede reescribir imágenes de distintos tipos (png, jpg, gif, svg, psd, 9-patch ...). Utiliza algoritmos de escalabilidad de alta calidad y es compatible con ciertas herramientas de compresión sin pérdida como pngcrush. Hay una GUI y línea de comando ui.
https://github.com/patrickfav/density-converter
En su caso, establecería el factor de escala de origen en 2 y verificará "escalar el escalado" y también establecerá la plataforma en Android.