1# Channels > Split CMYK
2# (fr) Canaux > Séparer CMJN
3# (es) Canales > Dividir CMYK
4# (de) Kanäle > CMYK teilen
5from lazpaint import image, dialog, layer, filters
6
7translation = dialog.select_translation(
8  en = {"Layer already split": "Layer already split", "Cyan": "Cyan", "Magenta": "Magenta", "Yellow": "Yellow", "Black": "Black", "Alpha": "Alpha"},
9  fr = {"Layer already split": "Le calque est déjà séparé", "Cyan": "Cyan", "Magenta": "Magenta", "Yellow": "Jaune", "Black": "Noir", "Alpha": "Alpha"},
10  es = {"Layer already split": "La capa ya está dividida", "Cyan": "Cian", "Magenta": "Magenta", "Yellow": "Amarillo", "Black": "Negro", "Alpha": "Alpha"},
11  de = {"Layer already split": "Die Ebene ist bereits geteilt", "Cyan": "Cyan", "Magenta": "Magenta", "Yellow": "Gelb", "Black": "Schwartz", "Alpha": "Alpha"}
12  )
13
14# check if it is a channel
15if layer.get_registry("split-channel") is not None:
16  dialog.show_message(translation["Layer already split"])
17  exit()
18
19layer_id = layer.get_id()
20layer_index = image.get_layer_index()
21layer_opacity = layer.get_opacity()
22layer_transparent = layer.is_transparent()
23cmy_id = None
24black_id = None
25
26# check if it has been split
27if layer.get_registry("split-channels-id") is not None:
28  for cur_layer_id in image.iterate_layers():
29    if layer.get_registry("split-source-id") == layer_id:
30      dialog.show_message(translation["Layer already split"])
31      exit()
32
33image.do_begin()
34channels = []
35if layer_transparent:
36  channels.append({"name": "Alpha", "channel": "A", "red": "alpha", "green": "alpha", "blue": "alpha", "alpha": "255"})
37channels.append({"name": "Black", "channel": "K", "red":"max(max(red,green),blue)", "green": "max(max(red,green),blue)", "blue": "max(max(red,green),blue)",  "alpha": "255"})
38#channels.append({"name": "Black", "channel": "K", "hue":"0", "saturation": "0", "lightness": "max(max(red,green),blue)",  "alpha": "255"})
39
40channels_id = []
41for ch in channels:
42  layer.select_id(layer_id)
43  layer.duplicate()
44  filters.filter_function(red = ch.get("red"), green = ch.get("green"), blue = ch.get("blue"), hue = ch.get("hue"), saturation = ch.get("saturation"), lightness = ch.get("lightness"), alpha = ch["alpha"], gamma_correction = False, corrected_hue = False)
45  layer.set_name(translation[ch["name"]])
46  layer.set_opacity(layer_opacity)
47  if ch["channel"] == "A":
48    layer.set_blend_op(layer.BLEND_MASK)
49  layer.set_registry("split-channel", ch["channel"])
50  layer.set_registry("split-source-id", layer_id)
51  if ch["channel"] == "K":
52    black_id = layer.get_id()
53    layer.duplicate()
54    layer.set_blend_op(layer.BLEND_DIVIDE)
55    black_div_id = layer.get_id()
56    layer.select_id(layer_id)
57    layer.duplicate()
58    copy_index = image.get_layer_index()
59    image.move_layer_index(copy_index, copy_index + 1)
60    image.select_layer_index(copy_index + 2)
61    layer.merge_over()
62    cmy_id = layer.get_id()
63  else:
64    channels_id.append(layer.get_id())
65
66if cmy_id is not None:
67  channels = []
68  channels.append({"name": "Cyan", "channel": "C", "red": "red", "green": "1", "blue": "1", "alpha": "255"})
69  channels.append({"name": "Magenta", "channel": "M", "red": "1", "green": "green", "blue": "1", "alpha": "255"})
70  channels.append({"name": "Yellow", "channel": "Y", "red": "1", "green": "1", "blue": "blue", "alpha": "255"})
71  channels[-1]["last"] = True
72  for ch in channels:
73    layer.select_id(cmy_id)
74    if ch.get("last") is None:
75      layer.duplicate()
76    filters.filter_function(red = ch.get("red"), green = ch.get("green"), blue = ch.get("blue"), alpha = ch["alpha"], gamma_correction = False)
77    layer.set_name(translation[ch["name"]])
78    layer.set_opacity(layer_opacity)
79    layer.set_blend_op(layer.BLEND_MULTIPLY)
80    layer.set_registry("split-channel", ch["channel"])
81    layer.set_registry("split-source-id", layer_id)
82    channels_id.append(layer.get_id())
83
84if black_id is not None:
85  channels_id.append(black_id)
86
87layer.select_id(layer_id)
88layer.set_registry("split-channels-id", channels_id)
89layer.set_visible(False)
90image.do_end()
91