[gimp] plug-ins: improve exporting of layer modes for openraster.
- From: Jacob Boerema <jboerema src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] plug-ins: improve exporting of layer modes for openraster.
- Date: Thu, 28 Jan 2021 00:09:24 +0000 (UTC)
commit 6d6b7e90c261a3ef37b180ac749ce6c365a203c8
Author: Jacob Boerema <jgboerema gmail com>
Date: Wed Jan 27 14:11:39 2021 -0500
plug-ins: improve exporting of layer modes for openraster.
The current openraster specification only has a limited
number of layer modes. Let's improve things a little bit
by mapping both the current and legacy layer modes
to the same openraster composite-op where available.
For the other layer modes we could examine what the
closest composite-op is, or add a GIMP specific op
(which is what Krita seems to do). For now we set
all these to the openraster equivalent of NORMAL.
plug-ins/python/file-openraster.py | 77 +++++++++++++++++++++++++++++++++++++-
1 file changed, 75 insertions(+), 2 deletions(-)
---
diff --git a/plug-ins/python/file-openraster.py b/plug-ins/python/file-openraster.py
index 19371070e5..d380e149a3 100755
--- a/plug-ins/python/file-openraster.py
+++ b/plug-ins/python/file-openraster.py
@@ -46,6 +46,79 @@ layermodes_map = {
"svg:plus": Gimp.LayerMode.ADDITION,
}
+# There are less svg blending ops than we have GIMP blend modes.
+# We are going to map them as closely as possible.
+gimp_layermodes_map = {
+ Gimp.LayerMode.NORMAL: "svg:src-over",
+ Gimp.LayerMode.NORMAL_LEGACY: "svg:src-over",
+ Gimp.LayerMode.MULTIPLY: "svg:multiply",
+ Gimp.LayerMode.MULTIPLY_LEGACY: "svg:multiply",
+ Gimp.LayerMode.SCREEN: "svg:screen",
+ Gimp.LayerMode.SCREEN_LEGACY: "svg:screen",
+ Gimp.LayerMode.OVERLAY: "svg:overlay",
+ Gimp.LayerMode.OVERLAY_LEGACY: "svg:overlay",
+ Gimp.LayerMode.DARKEN_ONLY: "svg:darken",
+ Gimp.LayerMode.DARKEN_ONLY_LEGACY: "svg:darken",
+ Gimp.LayerMode.LIGHTEN_ONLY: "svg:lighten",
+ Gimp.LayerMode.LIGHTEN_ONLY_LEGACY: "svg:lighten",
+ Gimp.LayerMode.DODGE: "svg:color-dodge",
+ Gimp.LayerMode.DODGE_LEGACY: "svg:color-dodge",
+ Gimp.LayerMode.BURN: "svg:color-burn",
+ Gimp.LayerMode.BURN_LEGACY: "svg:color-burn",
+ Gimp.LayerMode.HARDLIGHT: "svg:hard-light",
+ Gimp.LayerMode.HARDLIGHT_LEGACY: "svg:hard-light",
+ Gimp.LayerMode.SOFTLIGHT: "svg:soft-light",
+ Gimp.LayerMode.SOFTLIGHT_LEGACY: "svg:soft-light",
+ Gimp.LayerMode.DIFFERENCE: "svg:difference",
+ Gimp.LayerMode.DIFFERENCE_LEGACY: "svg:difference",
+ Gimp.LayerMode.HSL_COLOR: "svg:color",
+ Gimp.LayerMode.HSL_COLOR_LEGACY: "svg:color",
+ Gimp.LayerMode.HSV_VALUE: "svg:luminosity",
+ Gimp.LayerMode.HSV_VALUE_LEGACY: "svg:luminosity",
+ Gimp.LayerMode.HSV_HUE: "svg:hue",
+ Gimp.LayerMode.HSV_HUE_LEGACY: "svg:hue",
+ Gimp.LayerMode.HSV_SATURATION: "svg:saturation",
+ Gimp.LayerMode.HSV_SATURATION_LEGACY: "svg:saturation",
+ Gimp.LayerMode.ADDITION: "svg:plus",
+ Gimp.LayerMode.ADDITION_LEGACY: "svg:plus",
+
+ # FIXME Determine the closest available layer mode
+ # Alternatively we could add additional modes
+ # e.g. something like "gimp:dissolve", this
+ # is what Krita seems to do too
+ Gimp.LayerMode.DISSOLVE: "svg:src-over",
+ Gimp.LayerMode.DIVIDE: "svg:src-over",
+ Gimp.LayerMode.DIVIDE_LEGACY: "svg:src-over",
+ Gimp.LayerMode.BEHIND: "svg:src-over",
+ Gimp.LayerMode.BEHIND_LEGACY: "svg:src-over",
+ Gimp.LayerMode.GRAIN_EXTRACT: "svg:src-over",
+ Gimp.LayerMode.GRAIN_EXTRACT_LEGACY: "svg:src-over",
+ Gimp.LayerMode.GRAIN_MERGE: "svg:src-over",
+ Gimp.LayerMode.GRAIN_MERGE_LEGACY: "svg:src-over",
+ Gimp.LayerMode.COLOR_ERASE: "svg:src-over",
+ Gimp.LayerMode.COLOR_ERASE_LEGACY: "svg:src-over",
+ Gimp.LayerMode.LCH_HUE: "svg:src-over",
+ Gimp.LayerMode.LCH_CHROMA: "svg:src-over",
+ Gimp.LayerMode.LCH_COLOR: "svg:src-over",
+ Gimp.LayerMode.LCH_LIGHTNESS: "svg:src-over",
+ Gimp.LayerMode.SUBTRACT: "svg:src-over",
+ Gimp.LayerMode.SUBTRACT_LEGACY: "svg:src-over",
+ Gimp.LayerMode.VIVID_LIGHT: "svg:src-over",
+ Gimp.LayerMode.PIN_LIGHT: "svg:src-over",
+ Gimp.LayerMode.LINEAR_LIGHT: "svg:src-over",
+ Gimp.LayerMode.HARD_MIX: "svg:src-over",
+ Gimp.LayerMode.EXCLUSION: "svg:src-over",
+ Gimp.LayerMode.LINEAR_BURN: "svg:src-over",
+ Gimp.LayerMode.LUMA_DARKEN_ONLY: "svg:src-over",
+ Gimp.LayerMode.LUMA_LIGHTEN_ONLY: "svg:src-over",
+ Gimp.LayerMode.LUMINANCE: "svg:src-over",
+ Gimp.LayerMode.COLOR_ERASE: "svg:src-over",
+ Gimp.LayerMode.ERASE: "svg:src-over",
+ Gimp.LayerMode.MERGE: "svg:src-over",
+ Gimp.LayerMode.SPLIT: "svg:src-over",
+ Gimp.LayerMode.PASS_THROUGH: "svg:src-over",
+}
+
def reverse_map(mapping):
return dict((v,k) for k, v in mapping.items())
@@ -171,7 +244,7 @@ def save_ora(procedure, run_mode, image, n_drawables, drawables, file, args, dat
a['y'] = str(y)
a['opacity'] = str(opac)
a['visibility'] = 'visible' if visible else 'hidden'
- a['composite-op'] = reverse_map(layermodes_map).get(gimp_layer.get_mode(), 'svg:src-over')
+ a['composite-op'] = gimp_layermodes_map.get(gimp_layer.get_mode(), 'svg:src-over')
return layer
def add_group_layer(parent, opac, gimp_layer, visible=True):
@@ -182,7 +255,7 @@ def save_ora(procedure, run_mode, image, n_drawables, drawables, file, args, dat
a['name'] = gimp_layer.get_name()
a['opacity'] = str(opac)
a['visibility'] = 'visible' if visible else 'hidden'
- a['composite-op'] = reverse_map(layermodes_map).get(gimp_layer.get_mode(), 'svg:src-over')
+ a['composite-op'] = gimp_layermodes_map.get(gimp_layer.get_mode(), 'svg:src-over')
return group_layer
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]