1# Channels > Split RGB
2# (fr) Canaux > Séparer RVB
3# (es) Canales > Dividir RGB
4# (de) Kanäle > RVB teilen
5from lazpaint import image, dialog, layer, filters
6
7translation = dialog.select_translation(
8  en = {"Layer already split": "Layer already split", "Alpha": "Alpha", "Red": "Red", "Green": "Green", "Blue": "Blue"},
9  fr = {"Layer already split": "Le calque est déjà séparé", "Alpha": "Alpha", "Red": "Rouge", "Green": "Vert", "Blue": "Bleu"},
10  es = {"Layer already split": "La capa ya está dividida", "Alpha": "Alpha", "Red": "Rojo", "Green": "Verde", "Blue": "Azul"},
11  de = {"Layer already split": "Die Ebene ist bereits geteilt", "Alpha": "Alpha", "Red": "Rot", "Green": "Grün", "Blue": "Blau"}
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()
23
24# check if it has been split
25if layer.get_registry("split-channels-id") is not None:
26  for cur_layer_id in image.iterate_layers():
27    if layer.get_registry("split-source-id") == layer_id:
28      dialog.show_message(translation["Layer already split"])
29      exit()
30
31image.do_begin()
32channels = []
33if layer_transparent:
34  channels.append({"name": "Alpha", "channel": "A", "red": "alpha", "green": "alpha", "blue": "alpha", "alpha": "255"})
35channels.append({"name": "Red", "channel": "R", "red": "red", "green": "0", "blue": "0", "alpha": "255"})
36channels.append({"name": "Green", "channel": "G", "red": "0", "green": "green", "blue": "0", "alpha": "255"})
37channels.append({"name": "Blue", "channel": "B", "red": "0", "green": "0", "blue": "blue", "alpha": "255"})
38
39channels_id = []
40for ch in channels:
41  layer.select_id(layer_id)
42  layer.duplicate()
43  filters.filter_function(red = ch["red"], green = ch["green"], blue = ch["blue"], alpha = ch["alpha"], gamma_correction = False)
44  layer.set_name(translation[ch["name"]])
45  layer.set_opacity(layer_opacity)
46  if ch["channel"] == "A":
47    layer.set_blend_op(layer.BLEND_MASK)
48  elif ch != channels[-1]:
49    layer.set_blend_op(layer.BLEND_LIGHTEN)
50  layer.set_registry("split-channel", ch["channel"])
51  layer.set_registry("split-source-id", layer_id)
52  channels_id.append(layer.get_id())
53
54layer.select_id(layer_id)
55layer.set_registry("split-channels-id", channels_id)
56layer.set_visible(False)
57image.do_end()
58