예제 #1
0
def apply_stroke():
    global stroke_done, opacity_done, stroke_initial_color
    if opacity_done:
        image.undo()
        opacity_done = False
    if stroke_done:
        image.undo()
        stroke_done = False
    image.do_begin() 
    if chosen_radius > 0.5:
        layer.duplicate()
        disk_id = layer.get_id()
        filters.blur(name=filters.BLUR_DISK, radius=chosen_radius-0.5)
        filters.filter_function(red=overlay_color.red/255, green=overlay_color.green/255, blue=overlay_color.blue/255, alpha="min(alpha*"+str(chosen_radius*5)+",(1-alpha)*"+str(chosen_radius*5)+")", gamma_correction=False)
        layer.select_id(stroke_layer_id) 
    else:
        disk_id = None   
    filters.blur(name=filters.BLUR_CORONA, radius=chosen_radius+0.5)
    filters.filter_function(red=overlay_color.red/255, green=overlay_color.green/255, blue=overlay_color.blue/255, alpha="min(alpha*"+str(chosen_radius)+",(1-alpha)*"+str(chosen_radius)+")", gamma_correction=False)
    if disk_id is not None:
        layer.select_id(disk_id)
        layer.merge_over()
    layer.set_registry("overlay-color", overlay_color)
    stroke_initial_color = overlay_color
    stroke_done = image.do_end()
    apply_opacity()
예제 #2
0
def button_ok_click():
    global source_layer_id, chosen_radius, chosen_offset
    layer.select_id(source_layer_id)
    layer.set_registry("stroke-radius", chosen_radius)
    layer.set_registry("stroke-layer-id", stroke_layer_id)
    image.set_registry("stroke-radius", chosen_radius)
    image.do_end()
    exit()
예제 #3
0
def button_ok_click():
    global source_layer_id, chosen_radius, chosen_angle
    layer.select_id(source_layer_id)
    layer.set_registry(REGISTRY_NAME + "-radius", chosen_radius)
    layer.set_registry(REGISTRY_NAME + "-angle", chosen_angle)
    layer.set_registry(REGISTRY_NAME + "-layer-id", shadow_layer_id)
    image.set_registry(REGISTRY_NAME + "-radius", chosen_radius)
    image.set_registry(REGISTRY_NAME + "-angle", chosen_angle)
    image.do_end()
    exit()
예제 #4
0
def create_shadow_layer():
    global shadow_layer_id
    image.do_begin()
    if shadow_layer_id != None:
        layer.select_id(shadow_layer_id)
        layer.remove()
    layer.select_id(source_layer_id)
    layer.duplicate()
    layer.rasterize()
    layer.set_name(FRIENDLY_NAME + " of " + source_layer_name)
    layer.set_registry(REGISTRY_NAME + "-source-layer-id", source_layer_id)
    shadow_layer_id = layer.get_id()
    layer.set_registry("overlay-color", overlay_color)
    layer.set_opacity(chosen_opacity)
    image.do_end()
def create_shadow_layer():
    global shadow_layer_id
    image.do_begin()
    if shadow_layer_id != None:
        layer.select_id(shadow_layer_id)
        layer.remove()
    layer.select_id(source_layer_id)
    layer.duplicate()
    layer.set_name(FRIENDLY_NAME + " - " + source_layer_name)
    layer.set_registry("shadow-source-layer-id", source_layer_id)
    shadow_layer_id = layer.get_id()
    shadow_index = image.get_layer_index()
    image.move_layer_index(shadow_index, shadow_index - 1)
    filters.filter_function(red=overlay_color.red / 255,
                            green=overlay_color.green / 255,
                            blue=overlay_color.blue / 255,
                            gamma_correction=False)
    layer.set_registry("overlay-color", overlay_color)
    layer.set_opacity(chosen_opacity)
    image.do_end()
예제 #6
0
def apply_blur():
    global blur_done, opacity_done
    if opacity_done:
        image.undo()
        opacity_done = False
    if blur_done:
        image.undo()
        blur_done = False
    image.do_begin()
    if chosen_radius == 0:
        filters.filter_function(alpha=0, gamma_correction=False)
    else:
        layer.duplicate()
        layer.set_opacity(255)
        filters.filter_function(red="alpha",
                                green="alpha",
                                blue="alpha",
                                alpha=1,
                                gamma_correction=False)
        mask_layer_id = layer.get_id()

        layer.select_id(shadow_layer_id)
        filters.filter_function(red=overlay_color.red / 255,
                                green=overlay_color.green / 255,
                                blue=overlay_color.blue / 255,
                                gamma_correction=False)
        tools.choose(tools.MOVE_LAYER)
        offset = (math.sin(chosen_angle * math.pi / 180) * chosen_radius,
                  -math.cos(chosen_angle * math.pi / 180) * chosen_radius)
        tools.mouse([(0, 0), (offset[0], offset[1])])

        layer.select_id(mask_layer_id)
        layer.duplicate()
        mask_layer_id2 = layer.get_id()
        layer.select_id(mask_layer_id)
        tools.choose(tools.MOVE_LAYER)
        tools.mouse([(offset[0] / 2, offset[1] / 2), (0, 0)])
        colors.linear_negative()
        layer.set_blend_op(layer.BLEND_MASK)
        layer.merge_over()
        mask_layer_id = mask_layer_id2

        filters.blur(radius=chosen_radius)

        layer.select_id(mask_layer_id)
        layer.set_blend_op(layer.BLEND_MASK)
        layer.merge_over()

    blur_done = image.do_end()
    apply_opacity()
예제 #7
0
def create_stroke_layer():
    global stroke_layer_id
    image.do_begin()
    if stroke_layer_id != None:
        layer.select_id(stroke_layer_id)
        stroke_index = image.get_layer_index()
        selection.select_all()
        selection.delete()
        layer.select_id(source_layer_id)
        layer.duplicate()
        image.move_layer_index(image.get_layer_index(), stroke_index+1)
        layer.merge_over()        
    else:
        layer.select_id(source_layer_id)
        layer.duplicate()
        layer.set_name("Stroke of "+source_layer_name)
        layer.set_registry("stroke-source-layer-id", source_layer_id)
        stroke_layer_id = layer.get_id()
        stroke_index = image.get_layer_index()
        image.move_layer_index(stroke_index, stroke_index-1)
    image.do_end()
예제 #8
0
    "alpha": "255",
    "blend": layer.BLEND_HARD_LIGHT
})
channels.append({
    "name": "Hue",
    "channel": "H",
    "hue": "hue",
    "saturation": "1",
    "lightness": "0.5",
    "alpha": "255",
    "blend": layer.BLEND_DRAW
})

channels_id = []
for ch in channels:
    layer.select_id(layer_id)
    layer.duplicate()
    filters.filter_function(hue=ch["hue"],
                            saturation=ch["saturation"],
                            lightness=ch["lightness"],
                            alpha=ch["alpha"],
                            gamma_correction=False)
    layer.set_name(ch["name"] + " channel")
    layer.set_opacity(layer_opacity)
    if ch["channel"] != channels[-1]:
        layer.set_blend_op(ch["blend"])
    layer.set_registry("split-channel", ch["channel"])
    layer.set_registry("split-source-id", layer_id)
    channels_id.append(layer.get_id())

layer.select_id(layer_id)
def button_cancel_click():
    if image.do_end():
        image.undo()
    layer.select_id(source_layer_id)
    exit()
예제 #10
0
translation = dict(zip(english, dialog.translate_text(english)))

if layer.is_empty():
    dialog.show_message(translation["Layer is empty"])
    exit()

############ image processing

FRIENDLY_NAME = dialog.get_script_name()
MAX_RADIUS = 100
MAX_OFFSET = 100
MAX_OPACITY = 255

source_layer_id = layer.get_registry("shadow-source-layer-id")
if source_layer_id is not None:
    layer.select_id(source_layer_id)
else:
    source_layer_id = layer.get_id()
source_layer_name = layer.get_name()

chosen_radius = layer.get_registry("shadow-radius")
if chosen_radius == None:
    chosen_radius = image.get_registry("shadow-radius")
if chosen_radius == None:
    chosen_radius = 10

chosen_offset = layer.get_registry("shadow-offset")
if chosen_offset == None or len(chosen_offset) != 2:
    chosen_offset = image.get_registry("shadow-offset")
if chosen_offset == None or len(chosen_offset) != 2:
    chosen_offset = (10, 10)
예제 #11
0
# 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()
예제 #12
0
source_layer_id = layer.get_id()
source_layer_name = layer.get_name()

chosen_radius = layer.get_registry("stroke-radius")
if chosen_radius == None: 
    chosen_radius = image.get_registry("stroke-radius")
if chosen_radius == None:
    chosen_radius = 10

stroke_layer_id = layer.get_registry("stroke-layer-id")
if image.get_layer_index(stroke_layer_id) == None:
    stroke_layer_id = None

if stroke_layer_id is not None:
    layer.select_id(stroke_layer_id)
    chosen_opacity = layer.get_opacity()
    overlay_color = colors.str_to_RGBA(layer.get_registry("overlay-color"))
    layer.select_id(source_layer_id)
else:
    chosen_opacity = layer.get_opacity() 
    overlay_color = None

if overlay_color is None:
  overlay_color = colors.BLACK

def create_stroke_layer():
    global stroke_layer_id
    image.do_begin()
    if stroke_layer_id != None:
        layer.select_id(stroke_layer_id)
예제 #13
0
def iterate_layers():
  prev_id = layer.get_id()
  for layer_id in get_all_layers_id():
    layer.select_id(layer_id)
    yield layer_id
  layer.select_id(prev_id)