#!/usr/bin/env python
#
-# androink - Generate android resources for multiple resolutions
+# androink - Generate android resources for multiple densities
#
# Copyright (C) 2012 Federico Paolinelli <fedepaol@gmail.com>
# Copyright (C) 2013 Antonio Ospite <ospite@studenti.unina.it>
__description = """This script expects the svg to use Inkscape DPIs.
-This means that the resolution given in the drawing will be used for
-MDPI resolution and scaled to generate the other resolutions.
+Either MDPI or HDPI can be used as the baseline density and the drawables will
+scaled to generate the other densities.
"""
__version = "0.1"
BASE_OPTIONS = ' --export-area-page --export-png '
-# Inkscape default DPI is 90, we use this for the MDPI resource
+# Inkscape default DPI is 90
BASELINE_DPI = 90
-LDPI = ('drawable-ldpi', BASELINE_DPI * 0.75)
-MDPI = ('drawable-mdpi', BASELINE_DPI * 1.0)
-HDPI = ('drawable-hdpi', BASELINE_DPI * 1.5)
-XHDPI = ('drawable-xhdpi', BASELINE_DPI * 2.0)
-
-resolutions = [LDPI, MDPI, HDPI, XHDPI]
+# densities are calculated following the scaling ratio
+# 3:4:6:8 mapped to ldpi:mdpi:hdpi:xhdpi
+
+# for baseline mdpi consider 4 as the base ratio
+densities_baseline_mdpi = [
+ ('drawable-ldpi', BASELINE_DPI * 0.75), # 3/4
+ ('drawable-mdpi', BASELINE_DPI * 1.0), # 4/4
+ ('drawable-hdpi', BASELINE_DPI * 1.5), # 6/4
+ ('drawable-xhdpi', BASELINE_DPI * 2.0), # 8/4
+ ('drawable-xxhdpi', BASELINE_DPI * 3.0), # 12/4
+ ('drawable-xxxhdpi', BASELINE_DPI * 4.0), # 16/4
+]
+
+# for baseline hdpi consider 6 as the base ratio
+densities_baseline_hdpi = [
+ ('drawable-ldpi', BASELINE_DPI * 0.5), # 3/6
+ ('drawable-mdpi', BASELINE_DPI * 0.666666667), # 4/6
+ ('drawable-hdpi', BASELINE_DPI * 1.0), # 6/6
+ ('drawable-xhdpi', BASELINE_DPI * 1.333333333), # 8/6
+ ('drawable-xxhdpi', BASELINE_DPI * 2.0), # 12/6
+ ('drawable-xxxhdpi', BASELINE_DPI * 2.666666667), # 16/6
+]
def export_file(file_name):
print 'exporting file', file_name
name_without_ext = os.path.splitext(file_name)[0]
- for rel in resolutions:
- dpispec, dpi = rel
+ if args.baseline_density == 'mdpi':
+ densities = densities_baseline_mdpi
+ elif args.baseline_density == 'hdpi':
+ densities = densities_baseline_hdpi
+
+ for density in densities:
+ dpispec, dpi = density
res_path = os.path.join(args.res_folder, dpispec)
if not os.path.exists(res_path):
target = os.path.join(res_path, name_without_ext + '.png')
command_list = [args.ink_path, '--export-area-page',
- '-f', source_file,
- '--export-png', target,
- '--export-dpi', str(dpi)]
+ '-f', source_file,
+ '--export-png', target,
+ '--export-dpi', str(dpi)]
command = " ".join(command_list)
usage = "usage: %(prog)s [options]"
parser = argparse.ArgumentParser(usage=usage,
- description=__description,
- epilog=__author_info,
- version='%(prog)s ' + __version,)
+ description=__description,
+ epilog=__author_info,
+ version='%(prog)s ' + __version,)
parser.add_argument('-R', '--res_folder', metavar="<dir>",
- dest='res_folder', required=True,
- help='path to the project res folder')
+ dest='res_folder', required=True,
+ help='path to the project res folder')
parser.add_argument('-S', '--svg_folder', metavar="<dir>",
- dest='svg_folder', default='.',
- help='folder that contains all the svg files to be converted')
+ dest='svg_folder', default='.',
+ help='folder that contains all the svg files to be converted')
parser.add_argument('-I', '--inkscape_path', metavar="<inkscape_path>",
- dest='ink_path', default='inkscape',
- help='path of Inkscape executable')
+ dest='ink_path', default='inkscape',
+ help='path of Inkscape executable')
+
+ parser.add_argument('-d', '--baseline-density', metavar="<mdpi|hdpi>",
+ dest='baseline_density', choices=['mdpi', 'hdpi'], default='mdpi',
+ help='the baseline density to generate the drawables from')
parser.add_argument('-D', '--dry_run',
- dest='dry', action='store_const', const=True,
- help='performs a dry run')
+ dest='dry', action='store_const', const=True,
+ help='performs a dry run')
parser.add_argument('-F', '--single_file', metavar="<file>",
- dest='file_name',
- help='name of the file, if you want to convert only one file')
+ dest='file_name',
+ help='name of the file, if only one file is to be converted')
return parser