Пример #1
0
 def existImage():
     if self.pathfileImage in self.addedImages:
         image = self.addedImages[self.pathfileImage]['image']
         if pdb.gimp_image_is_valid(image):
             return {'isOk': True, 'image': image}
     images = gimp.image_list()
     if len(images) == 0:
         return {'isOk': False, 'message': "Not exist images"}
     images_by_filename = [
         item for item in images if item.filename == self.pathfileImage
     ]
     del images
     if len(images_by_filename) == 0:
         return {
             'isOk': False,
             'message':
             "Not exist image '{}'".format(self.pathfileImage)
         }
     image = images_by_filename[0]
     del images_by_filename
     if not pdb.gimp_image_is_valid(image):
         return {
             'isOk': False,
             'message':
             "Image '{}' is not valid".format(self.pathfileImage)
         }
     return {'isOk': True, 'image': image}
def png(image=None):
    if not image:
        image = gimp.image_list()[0]
    prefix = pdb.gimp_image_get_filename(image)[:-4] + "_"
    gimp.progress_init("Save frames as {}_*.png".format(prefix))
    for (layer_index, layer) in enumerate(image.layers):
        try:
            filename = "{}{:02d}.png".format(prefix, int(layer.name))
        except ValueError:
            filename = "{}{}.png".format(prefix, layer.name)
        pdb.file_png_save(
            image,
            layer,
            filename,
            None,
            True,  # interlace
            9,  # compression
            True,  # bkgd
            True,  # gama
            True,  # offs
            True,  # phys
            True,  # time
        )
        gimp.progress_update(100 * (layer_index + 1) / len(image.layers))
    gimp.message("All frames saved as {}_*.png".format(prefix))
Пример #3
0
    def existImage(self):
        if self.addedImages.has_key(self.filename):
            image = self.addedImages[self.filename]['image']
            if pdb.gimp_image_is_valid(image):
                return {'isOk': True, 'image': image}

        images = gimp.image_list()
        if len(images) == 0:
            return {'isOk': False, 'msg': "Not exist images"}
        images_by_filename = filter(
            lambda item: item.filename == self.filename, images)
        del images
        if len(images_by_filename) == 0:
            return {
                'isOk': False,
                'msg': "Not exist image '%s'" % self.filename
            }
        image = images_by_filename[0]
        del images_by_filename
        if not pdb.gimp_image_is_valid(image):
            return {
                'isOk': False,
                'msg': "Image '%s' is not valid" % self.filename
            }

        return {'isOk': True, 'image': image}
def add_alpha(image=None):
    if not image:
        image = gimp.image_list()[0]
    image_size = (image.width, image.height)
    for layer in image.layers:
        if not pdb.gimp_drawable_has_alpha(layer):
            layer.add_alpha()
        if layer.offsets != (0, 0) or (layer.width,
                                       layer.height) != image_size:
            pdb.gimp_layer_resize_to_image_size(layer)
def stack(target=None):
    for image in gimp.image_list():
        pdb.gimp_selection_none(image)
        if image.layers:
            if not target:
                target = image
            elif image != target:
                for layer in image.layers:
                    pdb.gimp_edit_cut(layer)
                    floating = pdb.gimp_edit_paste(target.layers[0], True)
                    pdb.gimp_floating_sel_to_layer(floating)
Пример #6
0
 def set_layer_opacity(self, opacity):
     print "Setting layer opacity to {}".format(opacity)
     try:
         image = gimp.image_list()[0]
         layer = pdb.gimp_image_get_active_layer(image)
         value = opacity / float(9.0)
         if value > 100.0:
             layer.opacity = 100.0
         else:
             layer.opacity = value
     except:
         print "ERROR"
def nobox(image=None):
    if not image:
        image = gimp.image_list()[0]
    pdb.gimp_context_set_sample_transparent(True)
    image_size = (image.width, image.height)
    for layer in image.layers:
        if not pdb.gimp_drawable_has_alpha(layer):
            layer.add_alpha()
        if layer.offsets != (0, 0) or (layer.width,
                                       layer.height) != image_size:
            pdb.gimp_layer_resize_to_image_size(layer)
        (xmax, ymax) = (image.width - 1, image.height - 1)
        for (x, y) in [(0, 0), (xmax, 0), (0, ymax), (xmax, ymax)]:
            _num_channels, pixel = pdb.gimp_drawable_get_pixel(layer, x, y)
            if all(p > 240 for p in pixel):
                pdb.gimp_image_select_contiguous_color(image, 2, layer, x, y)
                pdb.gimp_edit_clear(layer)
def mirror(image=None):
    if not image:
        image = gimp.image_list()[0]
    max_layer = 0
    for layer in image.layers:
        try:
            if int(layer.name) > max_layer:
                max_layer = int(layer.name)
        except ValueError:
            pass
    layers_to_reverse = image.layers[1:]
    pdb.gimp_selection_none(image)
    for layer in layers_to_reverse:
        pdb.gimp_edit_copy(layer)
        floating = pdb.gimp_edit_paste(image.layers[0], True)
        pdb.gimp_floating_sel_to_layer(floating)
        max_layer += 1
        floating.name = str(max_layer)
def down(image=None):
    if not image:
        image = gimp.image_list()[0]
    if not image.layers:
        return
    select_next = False
    selected = False
    for layer in image.layers:
        if select_next and not selected:
            layer.visible = True
            pdb.gimp_image_set_active_layer(image, layer)
            selected = True
        elif layer.visible:
            select_next = True
            layer.visible = False
    if not selected:
        layer = image.layers[0]
        layer.visible = True
        pdb.gimp_image_set_active_layer(image, layer)
  def existImage(self):
    if self.pathfileImage in self.addedImages:
      image = self.addedImages[ self.pathfileImage ]['image']
      if pdb.gimp_image_is_valid( image ):
        return { 'isOk': True, 'image': image }

    images = gimp.image_list()
    if len ( images ) == 0:
      return { 'isOk': False, 'message': "Not exist images"  }
    images_by_filename = filter( lambda item: item.filename == self.pathfileImage, images )
    del images
    if len ( images_by_filename ) == 0:
      return { 'isOk': False, 'message': "Not exist image '%s'" % self.pathfileImage }
    image = images_by_filename[0]
    del images_by_filename
    if not pdb.gimp_image_is_valid( image ):
      return { 'isOk': False, 'message': "Image '%s' is not valid" % self.pathfileImage }

    return { 'isOk': True, 'image': image }
def number(image=None):
    if not image:
        image = gimp.image_list()[0]
    highest = 0
    unnumbered = 0
    for layer in image.layers:
        try:
            n = int(layer.name)
            if n > highest:
                highest = n
        except ValueError:
            unnumbered += 1
    v = highest + unnumbered
    for layer in image.layers:
        try:
            int(layer.name)
        except ValueError:
            layer.name = str(v)
            v -= 1
def gif(image=None, suffix=None, fps=24):
    if not image:
        image = gimp.image_list()[0]
    file_path = pdb.gimp_image_get_filename(image)[:-4]
    if suffix:
        file_path += "_" + suffix.strip()
    file_path += ".gif"
    ms = int(1000.0 / fps)
    temp_image = False
    try:
        gimp.progress_init(
            "Save animated GIF @ {} fps = {} ms/frame as {}".format(
                fps, ms, file_path))
        if pdb.gimp_image_base_type(image) != 2:
            temp_image = True
            image = pdb.gimp_image_duplicate(image)
            pdb.gimp_image_convert_indexed(
                image,
                0,  # dither-type=CONVERT-DITHER-NONE
                0,  # palette-type=CONVERT-PALETTE-GENERATE
                255,  # num-cols
                False,  # alpha-dither
                False,  # remove-unused
                ""  # palette
            )
            gimp.progress_update(50)
        pdb.file_gif_save(
            image,
            image.layers[0],
            file_path,
            file_path,
            True,  # interlace
            True,  # loop
            ms,  # default-delay
            2  # default-dispose
        )
        gimp.progress_update(100)
        gimp.message("Saved animated GIF @ {} fps = {} ms/frame as {}".format(
            fps, ms, file_path))
    finally:
        if temp_image:
            pdb.gimp_image_delete(image)
Пример #13
0
 def on_window_focus(self, widget, other):
     """
     Update all timeline thumbnails.
     """
     # I discovered that gimp has a delay to update when the image are closed, putting
     # a small delay here i make sure that my if will catch the lack of the image
     # and close fanim correctly.
     time.sleep(0.1)
     if not (self.image in gimp.image_list()):
         self.destroy(False)
     else:
         # fixing problem that happens after delete the last layer through gimp.
         # and closing when theres no layers at all.
         if not self.image.layers:
             self.destroy(False)
         else:
             if self.active >= len(self.image.layers):
                 self.active = len(self.image.layers) - 1
             self._scan_image_layers()
             self.on_goto(None, GIMP_ACTIVE)
def sort(image=None):
    if not image:
        image = gimp.image_list()[0]
    image_size = (image.width, image.height)
    for layer in image.layers:
        if layer.offsets != (0, 0) or (layer.width,
                                       layer.height) != image_size:
            pdb.gimp_layer_resize_to_image_size(layer)
    more = True
    while more:
        more = False
        for a, b in zip(image.layers, image.layers[1:]):
            move_down = False
            try:
                move_down = int(a.name) < int(b.name)
            except ValueError:
                move_down = a.name < b.name
            if move_down:
                pdb.gimp_image_lower_item(image, a)
                more = True
                break
def up(image=None):
    if not image:
        image = gimp.image_list()[0]
    if not image.layers:
        return
    selected = False
    select_layer = None
    for layer in image.layers:
        if layer.visible:
            if not selected and select_layer:
                select_layer.visible = True
                pdb.gimp_image_set_active_layer(image, select_layer)
                selected = True
            layer.visible = False
        else:
            layer.visible = False
            if not selected:
                select_layer = layer
    if not selected:
        select_layer.visible = True
        pdb.gimp_image_set_active_layer(image, select_layer)
def frame(image=None, name=None):
    if not image:
        image = gimp.image_list()[0]
    if isinstance(name, int):
        name = str(name)
    if name:
        for layer in image.layers:
            if layer.name == name:
                layer.visible = True
                pdb.gimp_image_set_active_layer(image, layer)
            else:
                layer.visible = False
    else:
        first = True
        for (layer_index, layer) in enumerate(image.layers):
            if first and (layer.visible
                          or layer_index == len(image.layers) - 1):
                layer.visible = True
                pdb.gimp_image_set_active_layer(image, layer)
                first = False
            else:
                layer.visible = False
def showall(image=None):
    if not image:
        image = gimp.image_list()[0]
    for layer in image.layers:
        layer.visible = True
def renumber(image=None):
    if not image:
        image = gimp.image_list()[0]
    for (layer_index, layer) in enumerate(image.layers):
        layer.name = str(len(image.layers) - layer_index)
def sheet(image=None, cols=0):
    if not image:
        image = gimp.image_list()[0]
    if not cols:
        best = (1, 10000000)
        for cols in range(1, len(image.layers) + 1):
            rows = (len(image.layers) + (cols - 1)) // cols
            (sheet_width, sheet_height) = (cols * image.width,
                                           rows * image.height)
            sheet_aspect_ratio = sheet_width / sheet_height if sheet_width > sheet_height else sheet_height / sheet_width
            if sheet_aspect_ratio < best[1]:
                best = (cols, sheet_aspect_ratio)
        cols = best[0]
    file_path = "{}_sheet_{}_frames_{}_columns_{}x{}.png".format(
        pdb.gimp_image_get_filename(image)[:-4], len(image.layers), cols,
        image.width, image.height)
    gimp.progress_init("Save sheet as {}".format(file_path))
    rows = (len(image.layers) + (cols - 1)) // cols
    sheet = pdb.gimp_image_new(image.width * cols, image.height * rows, 0)
    try:
        sheet_layer = pdb.gimp_layer_new(
            sheet,
            sheet.width,
            sheet.height,
            1,  # type = RGBA-IMAGE
            "sprite sheet",
            100,  # opacity = 100 %
            0  # mode = LAYER-MODE-NORMAL-LEGACY
        )
        pdb.gimp_image_insert_layer(sheet, sheet_layer, None, 0)

        (row, col) = (0, 0)
        for (layer_index, layer) in enumerate(image.layers):
            pdb.gimp_selection_none(image)
            pdb.gimp_layer_resize_to_image_size(layer)
            pdb.gimp_edit_copy(layer)
            floating = pdb.gimp_edit_paste(sheet_layer, True)
            (left, top) = floating.offsets
            pdb.gimp_layer_translate(floating, col * image.width - left,
                                     row * image.height - top)
            pdb.gimp_floating_sel_anchor(floating)
            col += 1
            if col >= cols:
                col = 0
                row += 1
            gimp.progress_update(100 * (layer_index + 1) / len(image.layers))
        pdb.file_png_save(
            sheet,
            sheet_layer,
            file_path,
            None,
            True,  # interlace
            9,  # compression
            True,  # bkgd
            True,  # gama
            True,  # offs
            True,  # phys
            True,  # time
        )
        gimp.message("All frames saved as {}".format(file_path))
    finally:
        pdb.gimp_image_delete(sheet)
def bc(image=None, brightness=0, contrast=50):
    if not image:
        image = gimp.image_list()[0]
    for layer in image.layers:
        pdb.gimp_drawable_brightness_contrast(layer, brightness / 100.0,
                                              contrast / 100.0)