channels_merge.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. # Channels > Merge
  2. # (fr) Canaux > Fusionner
  3. from lazpaint import image, dialog, layer
  4. translation = dialog.translate_dict(["Current layer is not split"])
  5. channels_id = None
  6. new_layer_index = None
  7. image.do_begin()
  8. if layer.get_registry("split-channel") is not None:
  9. layer_id = layer.get_registry("split-source-id")
  10. if image.contains_layer_id(layer_id):
  11. layer.select_id(layer_id)
  12. channels_id = layer.get_registry("split-channels-id")
  13. new_layer_index = image.get_layer_index() + 1
  14. else:
  15. channels_id = []
  16. for cur_layer_id in image.iterate_layers():
  17. cur_source_id = layer.get_registry("split-source-id")
  18. if cur_source_id == layer_id:
  19. channels_id.insert(0, cur_layer_id)
  20. if new_layer_index is None:
  21. new_layer_index = image.get_layer_index()
  22. else:
  23. layer_id = layer.get_id()
  24. channels_id = layer.get_registry("split-channels-id")
  25. new_layer_index = image.get_layer_index() + 1
  26. if channels_id is None:
  27. dialog.show_message(translation["Current layer is not split"])
  28. exit()
  29. layer.new(dialog.get_script_name())
  30. image.move_layer_index(image.get_layer_index(), new_layer_index)
  31. for cur_layer_id in reversed(channels_id):
  32. layer.select_id(cur_layer_id)
  33. image.move_layer_index(image.get_layer_index(), new_layer_index+1)
  34. layer.merge_over()
  35. new_layer_id = layer.get_id()
  36. if image.contains_layer_id(layer_id):
  37. layer.select_id(layer_id)
  38. layer_index = image.get_layer_index()
  39. layer_name = layer.get_name()
  40. layer_opacity = layer.get_opacity()
  41. image.move_layer_index(new_layer_index, layer_index+1)
  42. layer.select_id(layer_id)
  43. layer.remove()
  44. layer.select_id(new_layer_id)
  45. layer.set_name(layer_name)
  46. layer.set_opacity(layer_opacity)
  47. image.do_end()