Пример #1
0
def duplicate(image, metadata_only=False):
    """
  Duplicate the specified image.
  
  If `metadata_only` is True, copy image metadata only, do not copy layers,
  channels or paths.
  """

    if not metadata_only:
        new_image = pdb.gimp_image_duplicate(image)
    else:
        new_image = pdb.gimp_image_new(image.width, image.height,
                                       image.base_type)

        pdb.gimp_image_set_resolution(new_image,
                                      *pdb.gimp_image_get_resolution(image))

        if image.base_type == gimpenums.INDEXED:
            pdb.gimp_image_set_colormap(new_image,
                                        *pdb.gimp_image_get_colormap(image))

        # Copy image parasites
        unused_, parasite_names = pdb.gimp_image_get_parasite_list(image)
        for name in parasite_names:
            parasite = image.parasite_find(name)
            # `pdb.gimp_image_parasite_attach` fails for some reason - use
            # `gimp.Image.parasite_attach` instead.
            new_image.parasite_attach(
                gimp.Parasite(parasite.name, parasite.flags, parasite.data))

    return new_image
def create_image_from_metadata(image_to_copy_metadata_from):
    """
  Create a new image with metadata (dimensions, base type, parasites, etc.)
  copied from `image_to_copy_metadata_from`.
  
  Layers, channels or paths are not copied. For a full image copy, use
  `pdb.gimp_image_duplicate()`.
  """
    image = image_to_copy_metadata_from

    new_image = pdb.gimp_image_new(image.width, image.height, image.base_type)

    pdb.gimp_image_set_resolution(new_image,
                                  *pdb.gimp_image_get_resolution(image))
    pdb.gimp_image_set_unit(new_image, pdb.gimp_image_get_unit(image))

    if image.base_type == gimpenums.INDEXED:
        pdb.gimp_image_set_colormap(new_image,
                                    *pdb.gimp_image_get_colormap(image))

    # Copy image parasites
    unused_, parasite_names = pdb.gimp_image_get_parasite_list(image)
    for name in parasite_names:
        parasite = image.parasite_find(name)
        # `pdb.gimp_image_parasite_attach` fails for some reason - use
        # `gimp.Image.parasite_attach` instead.
        new_image.parasite_attach(
            gimp.Parasite(parasite.name, parasite.flags, parasite.data))

    return new_image
Пример #3
0
    def _save_tags(self):
        """
    Save tags persistently to the item.
    """
        self._item.parasite_detach(self._tags_source_name)

        if self._tags:
            self._item.parasite_attach(
                gimp.Parasite(
                    self._tags_source_name, gimpenums.PARASITE_PERSISTENT
                    | gimpenums.PARASITE_UNDOABLE, pickle.dumps(self._tags)))
Пример #4
0
    def write(self, settings):
        settings_from_parasite = self._read_from_parasite(self.source_name)
        if settings_from_parasite is not None:
            settings_to_write = settings_from_parasite
            settings_to_write.update(self._to_dict(settings))
        else:
            settings_to_write = self._to_dict(settings)

        settings_data = pickle.dumps(settings_to_write)
        gimp.parasite_attach(
            gimp.Parasite(self.source_name, gimpenums.PARASITE_PERSISTENT,
                          settings_data))
 def write_dict(self, setting_names_and_values):
     data = pickle.dumps(setting_names_and_values)
     gimp.parasite_attach(
         gimp.Parasite(self.source_name, gimpenums.PARASITE_PERSISTENT,
                       data))
 def get_parasite(self):
   return gimp.Parasite(*self._get_values())
 def write(self, settings):
     settings_data = pickle.dumps(self._to_dict(settings))
     gimp.parasite_attach(
         gimp.Parasite(self.source_name, gimpenums.PARASITE_PERSISTENT,
                       settings_data))