12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- # Split RGB channels (using Pillow)
- from lazpaint import image, dialog, layer
- try:
- from PIL import Image
- except ImportError:
- dialog.show_message("Please install Pillow for Python.")
- exit()
- # check if it is a channel
- if layer.get_registry("split-channel") is not None:
- dialog.show_message("Layer already split")
- exit()
- layer_id = layer.get_id()
- layer_index = image.get_layer_index()
- layer_opacity = layer.get_opacity()
- layer_transparent = layer.is_transparent()
- # check if it has been split
- if layer.get_registry("split-channels-id") is not None:
- for i in range(1, layer.get_count()):
- image.select_layer_index(i)
- if layer.get_registry("split-source-id") == layer_id:
- dialog.show_message("Layer already split")
- exit()
- layer.select_id(layer_id)
- temp_name = image.get_temporary_name()
- temp_name = layer.save_as(temp_name)
- if temp_name is None:
- dialog.show_message("Failed to retrieve layer")
- exit()
- im = Image.open(temp_name)
- width, height = im.size
- zero = Image.new("L", (width, height))
- r = Image.merge("RGB", [im.getchannel("R"), zero, zero])
- g = Image.merge("RGB", [zero, im.getchannel("G"), zero])
- b = Image.merge("RGB", [zero, zero, im.getchannel("B")])
- image.do_begin()
- layer.select_id(layer_id)
- layer.set_visible(False)
- channels = [(r, "Red", "R"), (g, "Green", "G"), (b, "Blue", "B")]
- if layer_transparent:
- a = im.getchannel("A")
- channels.insert(0, (a, "Alpha", "A"))
- channels_id = []
- for ch in channels:
- ch[0].save(temp_name, "BMP")
- layer.add_from_file(temp_name)
- layer.set_name(ch[1] + " channel")
- layer.set_opacity(layer_opacity)
- if ch[2] == "A":
- layer.set_blend_op(layer.BLEND_MASK)
- elif ch[2] != channels[-1][2]:
- layer.set_blend_op(layer.BLEND_LIGHTEN)
- layer.set_registry("split-channel", ch[2])
- layer.set_registry("split-source-id", layer_id)
- channels_id.append(layer.get_id())
- image.move_layer_index(image.get_layer_index(), layer_index+1)
- layer.select_id(layer_id)
- layer.set_registry("split-channels-id", channels_id)
- image.do_end()
|