summaryrefslogtreecommitdiffstats
path: root/share/extensions/image_attributes.py
diff options
context:
space:
mode:
Diffstat (limited to '')
-rwxr-xr-xshare/extensions/image_attributes.py153
1 files changed, 153 insertions, 0 deletions
diff --git a/share/extensions/image_attributes.py b/share/extensions/image_attributes.py
new file mode 100755
index 0000000..9b93eba
--- /dev/null
+++ b/share/extensions/image_attributes.py
@@ -0,0 +1,153 @@
+#!/usr/bin/env python
+# coding=utf-8
+#
+# Copyright (C) 2015, ~suv <suv-sf@users.sf.net>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+"""
+image_attributes.py - adjust image attributes which don't have global
+GUI options yet
+
+Tool for Inkscape 0.91 to adjust rendering of drawings with linked
+or embedded bitmap images created with older versions of Inkscape
+or third-party applications.
+"""
+
+import inkex
+from inkex import Image
+
+
+class ImageAttributes(inkex.EffectExtension):
+ """Set attributes in images"""
+
+ def effect(self):
+ self.options.tab_main()
+
+ def add_arguments(self, pars):
+ pars.add_argument(
+ "--tab_main", type=self.arg_method(), default=self.method_tab_basic
+ )
+ pars.add_argument("--fix_scaling", type=inkex.Boolean, default=True)
+ pars.add_argument("--fix_rendering", type=inkex.Boolean, default=False)
+ pars.add_argument(
+ "--aspect_ratio",
+ default="none",
+ help="Value for attribute 'preserveAspectRatio'",
+ )
+ pars.add_argument(
+ "--aspect_clip", default="unset", help="optional 'meetOrSlice' value"
+ )
+ pars.add_argument(
+ "--aspect_ratio_scope",
+ type=self.arg_method("change"),
+ default="selected_only",
+ help="When to edit 'preserveAspectRatio' attribute",
+ )
+ pars.add_argument(
+ "--image_rendering",
+ default="unset",
+ help="Value for attribute 'image-rendering'",
+ )
+ pars.add_argument(
+ "--image_rendering_scope",
+ type=self.arg_method("change"),
+ default="selected_only",
+ help="When to edit 'image-rendering' attribute",
+ )
+
+ def change_attribute(self, node, attribute):
+ for key, value in attribute.items():
+ if key == "preserveAspectRatio":
+ # set presentation attribute
+ if value != "unset":
+ node.set(key, str(value))
+ else:
+ if node.get(key):
+ del node.attrib[key]
+ elif key == "image-rendering":
+ node_style = dict(inkex.Style.parse_str(node.get("style")))
+ if key not in node_style:
+ # set presentation attribute
+ if value != "unset":
+ node.set(key, str(value))
+ else:
+ if node.get(key):
+ del node.attrib[key]
+ else:
+ # set style property
+ if value != "unset":
+ node_style[key] = str(value)
+ else:
+ del node_style[key]
+ node.set("style", str(inkex.Style(node_style)))
+ else:
+ pass
+
+ def change_all_images(self, node, attribute):
+ for img in node.xpath("descendant-or-self::svg:image"):
+ self.change_attribute(img, attribute)
+
+ def change_selected_only(self, selected, attribute):
+ for node in selected.values():
+ if isinstance(node, Image):
+ self.change_attribute(node, attribute)
+
+ def change_in_selection(self, selected, attribute):
+ for node in selected.values():
+ self.change_all_images(node, attribute)
+
+ def change_in_document(self, selected, attribute):
+ self.change_all_images(self.document.getroot(), attribute)
+
+ def change_on_parent_group(self, selected, attribute):
+ for node in selected.values():
+ self.change_attribute(node.getparent(), attribute)
+
+ def change_on_root_only(self, selected, attribute):
+ self.change_attribute(self.document.getroot(), attribute)
+
+ def method_tab_basic(self):
+ """Render all bitmap images like in older Inskcape versions"""
+ self.change_in_document(
+ self.svg.selection,
+ {
+ "preserveAspectRatio": (
+ "none" if self.options.fix_scaling else "unset"
+ ),
+ "image-rendering": (
+ "optimizeSpeed" if self.options.fix_rendering else "unset"
+ ),
+ },
+ )
+
+ def method_tab_aspect_ratio(self):
+ """Image Aspect Ratio"""
+ attr_val = [self.options.aspect_ratio]
+ if self.options.aspect_clip != "unset":
+ attr_val.append(self.options.aspect_clip)
+ self.options.aspect_ratio_scope(
+ self.svg.selection, {"preserveAspectRatio": " ".join(attr_val)}
+ )
+
+ def method_tab_image_rendering(self):
+ """Image Rendering Quality"""
+ self.options.image_rendering_scope(
+ self.svg.selection, {"image-rendering": self.options.image_rendering}
+ )
+
+
+if __name__ == "__main__":
+ ImageAttributes().run()