123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- # Merge RGB channels
- from lazpaint import image, dialog, layer
- try:
- from PIL import Image
- except ImportError:
- dialog.show_message("Please install Pillow for Python.")
- exit()
- channels_id = None
- image.do_begin()
- if layer.get_registry("split-channel") is not None:
- layer_id = layer.get_registry("split-source-id")
- if image.contains_layer_id(layer_id):
- layer.select_id(layer_id)
- channels_id = layer.get_registry("split-channels-id")
- else:
- channels_id = []
- for i in range(1, image.get_layer_count()+1):
- image.select_layer_index(i)
- cur_layer_id = layer.get_registry("split-source-id")
- if cur_layer_id == layer_id:
- channels_id.append(layer.get_id())
- else:
- layer_id = layer.get_id()
- channels_id = layer.get_registry("split-channels-id")
- if channels_id is None:
- dialog.show_message("Current layer is not split")
- exit()
- width, height = image.get_size()
- zero = Image.new("L", (width, height))
- one = Image.new("L", (width, height), 255)
- channels = {"R": zero, "G": zero, "B": zero, "A": one}
- temp_name = image.get_temporary_name()
- for ch_id in channels_id:
- if image.contains_layer_id(ch_id):
- layer.select_id(ch_id)
- ch = layer.get_registry("split-channel")
- if ch == "A":
- file_format = "PNG"
- else:
- file_format = "BMP"
- temp_name = layer.save_as(temp_name, file_format)
- if temp_name is None:
- dialog.show_message("Failed to retrieve layer")
- exit()
- channels[ch] = Image.open(temp_name).getchannel(ch)
- merged = Image.merge("RGBA", [channels["R"], channels["G"], channels["B"], channels["A"]])
- merged.save(temp_name, "PNG")
- for ch_id in channels_id:
- if image.contains_layer_id(ch_id):
- layer.select_id(ch_id)
- layer.remove()
-
- layer.add_from_file(temp_name)
- layer.set_name("Merged channels")
- new_layer_id = layer.get_id()
- new_layer_index = image.get_layer_index()
- if image.contains_layer_id(layer_id):
- layer.select_id(layer_id)
- layer_index = image.get_layer_index()
- layer_name = layer.get_name()
- layer_opacity = layer.get_opacity()
- image.move_layer_index(new_layer_index, layer_index+1)
- layer.select_id(layer_id)
- layer.remove()
- layer.select_id(new_layer_id)
- layer.set_name(layer_name)
- layer.set_opacity(layer_opacity)
-
- image.do_end()
|