channels_split_rgb.py 2.4 KB

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