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
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)))
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))