channels_split_rgb.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. # Channels > Split RGB
  2. from lazpaint import image, dialog, layer, filters
  3. # check if it is a channel
  4. if layer.get_registry("split-channel") is not None:
  5. dialog.show_message("Layer already split")
  6. exit()
  7. layer_id = layer.get_id()
  8. layer_index = image.get_layer_index()
  9. layer_opacity = layer.get_opacity()
  10. layer_transparent = layer.is_transparent()
  11. # check if it has been split
  12. if layer.get_registry("split-channels-id") is not None:
  13. for cur_layer_id in image.iterate_layers():
  14. if layer.get_registry("split-source-id") == layer_id:
  15. dialog.show_message("Layer already split")
  16. exit()
  17. image.do_begin()
  18. channels = []
  19. if layer_transparent:
  20. channels.append({"name": "Alpha", "channel": "A", "red": "alpha", "green": "alpha", "blue": "alpha", "alpha": "255"})
  21. channels.append({"name": "Red", "channel": "R", "red": "red", "green": "0", "blue": "0", "alpha": "255"})
  22. channels.append({"name": "Green", "channel": "G", "red": "0", "green": "green", "blue": "0", "alpha": "255"})
  23. channels.append({"name": "Blue", "channel": "B", "red": "0", "green": "0", "blue": "blue", "alpha": "255"})
  24. channels_id = []
  25. for ch in channels:
  26. layer.select_id(layer_id)
  27. layer.duplicate()
  28. filters.filter_function(red = ch["red"], green = ch["green"], blue = ch["blue"], alpha = ch["alpha"], gamma_correction = False)
  29. layer.set_name(ch["name"] + " channel")
  30. layer.set_opacity(layer_opacity)
  31. if ch["channel"] == "A":
  32. layer.set_blend_op(layer.BLEND_MASK)
  33. elif ch != channels[-1]:
  34. layer.set_blend_op(layer.BLEND_LIGHTEN)
  35. layer.set_registry("split-channel", ch["channel"])
  36. layer.set_registry("split-source-id", layer_id)
  37. channels_id.append(layer.get_id())
  38. layer.select_id(layer_id)
  39. layer.set_registry("split-channels-id", channels_id)
  40. layer.set_visible(False)
  41. image.do_end()