summaryrefslogtreecommitdiffstats
path: root/share/extensions/export_gimp_palette.py
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 18:24:48 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 18:24:48 +0000
commitcca66b9ec4e494c1d919bff0f71a820d8afab1fa (patch)
tree146f39ded1c938019e1ed42d30923c2ac9e86789 /share/extensions/export_gimp_palette.py
parentInitial commit. (diff)
downloadinkscape-cca66b9ec4e494c1d919bff0f71a820d8afab1fa.tar.xz
inkscape-cca66b9ec4e494c1d919bff0f71a820d8afab1fa.zip
Adding upstream version 1.2.2.upstream/1.2.2upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'share/extensions/export_gimp_palette.py')
-rwxr-xr-xshare/extensions/export_gimp_palette.py77
1 files changed, 77 insertions, 0 deletions
diff --git a/share/extensions/export_gimp_palette.py b/share/extensions/export_gimp_palette.py
new file mode 100755
index 0000000..bfdcae3
--- /dev/null
+++ b/share/extensions/export_gimp_palette.py
@@ -0,0 +1,77 @@
+#!/usr/bin/env python
+# coding=utf-8
+#
+# Copyright (c) 2009 - Jos Hirth, kaioa.com
+#
+# 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+"""
+Export a gimp pallet file (.gpl)
+"""
+
+import inkex
+from inkex import ShapeElement, ColorIdError, ColorError
+
+
+class ExportGimpPalette(inkex.OutputExtension):
+ """Export all colors in a document to a gimp pallet"""
+
+ select_all = (ShapeElement,)
+ names = {}
+
+ def save(self, stream):
+ name = self.svg.name.replace(".svg", "")
+ stream.write("GIMP Palette\nName: {}\n#\n".format(name).encode("utf-8"))
+
+ for key, value in sorted(list(set(self.get_colors()))):
+ stream.write("{} {}\n".format(key, value).encode("utf-8"))
+
+ def get_colors(self):
+ """Get all the colors from the selected elements"""
+ for elem in self.svg.selection.filter(ShapeElement):
+ for color in self.process_element(elem):
+ if str(color).upper() == "NONE":
+ continue
+ yield (
+ "{:3d} {:3d} {:3d}".format(*color.to_rgb()),
+ self.names.get(color) or str(color).upper(),
+ )
+
+ def process_element(self, elem):
+ """Recursively process elements for colors"""
+ style = elem.specified_style()
+ for col in inkex.Style.color_props:
+ try:
+ col = inkex.Color(style.get(col))
+ if elem.getparent().get("inkscape:swatch") == "solid":
+ self.names[col] = elem.getparent().get_id()
+ yield col
+ except ColorIdError:
+ gradient = self.svg.getElementById(style.get(col))
+ for stop in gradient.stops:
+ for item in self.process_element(stop):
+ yield item
+ except ColorError:
+ pass # Bad color
+
+ if (
+ elem.href is not None
+ ): # Capture colors of symbols or clones pointing to defs
+ for color in self.process_element(elem.href):
+ yield color
+
+
+if __name__ == "__main__":
+ ExportGimpPalette().run()