diff options
author | Daniel J. Ramirez <djrmuv@gmail.com> | 2016-06-14 21:42:02 -0500 |
---|---|---|
committer | Daniel J. Ramirez <djrmuv@gmail.com> | 2016-06-14 21:42:02 -0500 |
commit | c43008d2009206f231e9e8db0a3561617afa79cd (patch) | |
tree | f717d1e3ce1f7de1c209590b6e761abf1dd9efab | |
parent | 0537709b396530346f8df3217c2c19574760fc94 (diff) |
Added new svgs to pngs exporter
-rw-r--r-- | tools/scripts/svgs_2_pngs.py | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/tools/scripts/svgs_2_pngs.py b/tools/scripts/svgs_2_pngs.py new file mode 100644 index 0000000000..acb50892c3 --- /dev/null +++ b/tools/scripts/svgs_2_pngs.py @@ -0,0 +1,137 @@ +# -*- coding: utf-8 -*- + +# Basic exporter for svg icons + +from os import listdir +from os.path import isfile, join, dirname, realpath +import subprocess +import sys + +import rsvg +import cairo + +last_svg_path = None +last_svg_data = None + +SCRIPT_FOLDER = dirname(realpath(__file__)) + '/' +theme_dir_base = SCRIPT_FOLDER + '../../scene/resources/default_theme/' +theme_dir_source = theme_dir_base + 'source/' +icons_dir_base = SCRIPT_FOLDER + '../editor/icons/' +icons_dir_2x = icons_dir_base + '2x/' +icons_dir_source = icons_dir_base + 'source/' + + +def svg_to_png(svg_path, png_path, dpi): + global last_svg_path, last_svg_data + + zoom = int(dpi / 90) + if last_svg_path != svg_path: + last_svg_data = open(svg_path, 'r').read() + last_svg_path = svg_path + svg = rsvg.Handle(data=last_svg_data) + img = cairo.ImageSurface( + cairo.FORMAT_ARGB32, + svg.props.width * zoom, + svg.props.height * zoom + ) + ctx = cairo.Context(img) + ctx.set_antialias(cairo.ANTIALIAS_DEFAULT) + ctx.scale(zoom, zoom) + svg.render_cairo(ctx) + img.write_to_png('%s.png' % png_path) + svg.close() + + +def export_icons(): + svgs_path = icons_dir_source + + file_names = [f for f in listdir(svgs_path) if isfile(join(svgs_path, f))] + + for file_name in file_names: + # name without extensions + name_only = file_name.replace('.svg', '') + + out_icon_names = [name_only] # export to a png with the same file name + theme_out_icon_names = [] + # special cases + if special_icons.has_key(name_only): + special_icon = special_icons[name_only] + if type(special_icon) is dict: + if special_icon.get('avoid_self'): + out_icon_names = [] + if special_icon.has_key('output_names'): + out_icon_names += special_icon['output_names'] + if special_icon.has_key('theme_output_names'): + theme_out_icon_names += special_icon['theme_output_names'] + + source_path = '%s%s.svg' % (svgs_path, name_only) + + for out_icon_name in out_icon_names: + svg_to_png(source_path, icons_dir_base + out_icon_name, 90) + svg_to_png(source_path, icons_dir_2x + out_icon_name, 180) + for theme_out_icon_name in theme_out_icon_names: + svg_to_png(source_path, theme_dir_base + theme_out_icon_name, 90) + + + +def export_theme(): + svgs_path = theme_dir_source + file_names = [f for f in listdir(svgs_path) if isfile(join(svgs_path, f))] + + for file_name in file_names: + # name without extensions + name_only = file_name.replace('.svg', '') + + out_icon_names = [name_only] # export to a png with the same file name + # special cases + if theme_icons.has_key(name_only): + special_icon = theme_icons[name_only] + if type(special_icon) is dict: + if special_icon.has_key('output_names'): + out_icon_names += special_icon['output_names'] + + source_path = '%s%s.svg' % (svgs_path, name_only) + + for out_icon_name in out_icon_names: + svg_to_png(source_path, theme_dir_base + out_icon_name, 90) + + +# special cases for icons that will be exported to multiple target pngs or that require transforms. +special_icons = { + 'icon_add_track': dict( + output_names=['icon_add'], + theme_output_names=['icon_add', 'icon_zoom_more'] + ), + 'icon_new': dict( output_names=['icon_file'] ), + 'icon_animation_tree_player': dict( output_names=['icon_animation_tree'] ), + 'icon_tool_rotate': dict( + output_names=['icon_reload'], + theme_output_names= ['icon_reload'] + ), + 'icon_multi_edit': dict( output_names=['icon_multi_node_edit'] ), + 'icon_folder': dict( + output_names=['icon_load', 'icon_open'], + theme_output_names= ['icon_folder'] + ), + 'icon_file_list': dict( output_names=['icon_enum'] ), + 'icon_collision_2d': dict( output_names=['icon_collision_polygon_2d', 'icon_polygon_2d'] ), + 'icon_class_list': dict( output_names=['icon_filesystem'] ), + 'icon_color_ramp': dict( output_names=['icon_graph_color_ramp'] ), + 'icon_translation': dict( output_names=['icon_p_hash_translation'] ), + 'icon_shader': dict( output_names=['icon_shader_material', 'icon_material_shader'] ), + 'icon_canvas_item_shader_graph': dict( output_names=['icon_material_shader_graph'] ), + + 'icon_color_pick': dict( theme_output_names= ['icon_color_pick'], avoid_self=True ), + 'icon_play': dict( theme_output_names= ['icon_play'] ), + 'icon_stop': dict( theme_output_names= ['icon_stop'] ), + 'icon_zoom_less': dict( theme_output_names= ['icon_zoom_less'], avoid_self=True ), + 'icon_zoom_reset': dict( theme_output_names= ['icon_zoom_reset'], avoid_self=True ) +} + +theme_icons = { + 'icon_close': dict(output_names=['close', 'close_hl']), + 'tab_menu': dict(output_names=['tab_menu_hl']) +} + +export_icons() +export_theme() |