Welcome, Guest
You have to register before you can post on our site.

Username
  

Password
  





Search Forums

(Advanced Search)

Forum Statistics
» Members: 4,620
» Latest member: KjellA
» Forum threads: 7,486
» Forum posts: 40,868

Full Statistics

Latest Threads
producing an image
Forum: Gallery
Last Post: MJ Barmish
2 hours ago
» Replies: 0
» Views: 21
Gimp closes automatically
Forum: General questions
Last Post: rich2005
4 hours ago
» Replies: 1
» Views: 67
GIMP 3.x: Editing a pdf
Forum: General questions
Last Post: rich2005
5 hours ago
» Replies: 1
» Views: 61
Is This Possible ? Print ...
Forum: General questions
Last Post: rich2005
5 hours ago
» Replies: 3
» Views: 73
Color is not translating ...
Forum: General questions
Last Post: Ofnuts
Today, 06:37 AM
» Replies: 1
» Views: 105
3.0.4 Crashes when drag a...
Forum: Gimp 2.99 & Gimp 3.0
Last Post: kayalif
Today, 06:23 AM
» Replies: 9
» Views: 395
how to change default pas...
Forum: Gimp 2.99 & Gimp 3.0
Last Post: CmykStudent
Today, 04:03 AM
» Replies: 25
» Views: 12,019
CMYK color mode Gimp 2.10
Forum: Extending the GIMP
Last Post: rich2005
Yesterday, 08:30 PM
» Replies: 18
» Views: 81,884
Endianess of pixel data i...
Forum: Scripting questions
Last Post: Ofnuts
Yesterday, 07:23 PM
» Replies: 3
» Views: 113
Edge detect leaves invisi...
Forum: Gimp 2.99 & Gimp 3.0
Last Post: marty39
Yesterday, 12:18 PM
» Replies: 3
» Views: 169

 
  Blur/Sharp tool
Posted by: AWysy - 07-10-2025, 04:59 PM - Forum: General questions - Replies (5)

Hi,
Just started to use GIMP.  I am making my first experiences.
I have one question concerning Blur/Sharpen tool.   After blurring and switching to sharpening the blurred part does not "return" to the original by applying the sharpen too.  However after the sharpening, blurring functions.  Is this normal, or some of the settings need to be changed.?
Thank you

Print this item

  script not available
Posted by: Zydelum - 07-10-2025, 04:33 PM - Forum: Extending the GIMP - No Replies

Hi,

Code:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import gi
gi.require_version('Gimp', '3.0')
from gi.repository import Gimp
gi.require_version('GimpUi', '3.0')
from gi.repository import GimpUi
gi.require_version('Gegl', '0.4') # Gegl est utilisé pour les opérations de bas niveau sur les pixels
from gi.repository import Gegl
from gi.repository import GObject
from gi.repository import GLib

import sys
import math # Pour la fonction sqrt (racine carrée) dans le calcul de la différence de couleur

# Fonctions de traduction (standard pour les plugins GIMP)
def N_(message): return message
def _(message): return GLib.dgettext(None, message)

class CleanAndRegularize (Gimp.PlugIn):
   ## GimpPlugIn virtual methods ##

   # Cette méthode est appelée par GIMP au démarrage pour savoir quels plugins sont disponibles
   def do_query_procedures(self):
       # Retourne une liste des noms de procédures que ce plugin fournit
       return [ "plug-in-clean-and-regularize" ]

   # Cette méthode est appelée pour créer une instance de la procédure
   def do_create_procedure(self, name):
       # Crée une nouvelle procédure d'image
       procedure = Gimp.ImageProcedure.new(self, name,
                                           Gimp.PDBProcType.PLUGIN,
                                           self.run, None)

       # Définit les types d'images sur lesquels le plugin peut opérer
       procedure.set_image_types("*") # Peut opérer sur n'importe quel type d'image

       # Définit la sensibilité du plugin (nécessite un calque sélectionné)
       procedure.set_sensitivity_mask(Gimp.ProcedureSensitivityMask.DRAWABLE)

       # Définit le texte qui apparaîtra dans le menu GIMP
       procedure.set_menu_label(_("Nettoyer et Régulariser..."))
       # Définit le chemin dans le menu GIMP
       procedure.add_menu_path('<Image>/Filters/Ma_Regularisation/')

       # Ajoute la documentation (visible dans le navigateur de procédures)
       procedure.set_documentation(_("Nettoie une image en rendant transparents les pixels en dehors d'une couleur sélectionnée, puis régularise la forme restante."),
                                   _("Rend transparents les pixels en dehors d'une couleur sélectionnée et régularise la forme restante."),
                                   name)
       # Attribution de l'auteur
       procedure.set_attribution("Votre Nom", "Votre Nom", "2025")

       # Ajoute les paramètres de la procédure (ceux qui apparaissent dans la boîte de dialogue)
       procedure.add_argument_from_property(GObject.Property(
           "target-color", "Couleur à conserver",
           "La couleur cible à conserver dans l'image.",
           GObject.TYPE_JSUINT64, # Type de propriété pour la couleur (RGBA 64 bits)
           Gimp.RGB(255, 255, 255).to_rgba(), # Valeur par défaut (blanc)
           GObject.ParamFlags.READWRITE | GObject.ParamFlags.CONSTRUCT_ONLY
       ))
       procedure.add_argument_from_property(GObject.Property(
           "tolerance", "Tolérance de couleur (0-255)",
           "La tolérance pour la comparaison des couleurs (0-255).",
           GObject.TYPE_INT, # Type entier
           30, # Valeur par défaut
           GObject.ParamFlags.READWRITE | GObject.ParamFlags.CONSTRUCT_ONLY,
           minimum=0, maximum=255
       ))
       procedure.add_argument_from_property(GObject.Property(
           "operation-type", "Opération de régularisation",
           "Le type d'opération de régularisation à appliquer.",
           GObject.TYPE_INT, # Type entier pour l'option
           0, # Valeur par défaut (0 = Aucune)
           GObject.ParamFlags.READWRITE | GObject.ParamFlags.CONSTRUCT_ONLY,
           # Les options sont définies par des paires valeur/label
           blurb_values=["Aucune", "Érosion de la sélection", "Dilatation de la sélection"]
       ))

       return procedure

   # La méthode 'run' est le cœur du plugin, exécutée lorsque l'utilisateur lance le plugin
   def run(self, procedure, run_mode, image, drawables, config, run_data):
       # Vérifie qu'un seul calque est sélectionné
       if len(drawables) != 1:
           msg = _("Procedure '{}' only works with one drawable.").format(procedure.get_name())
           error = GLib.Error.new_literal(Gimp.PlugIn.error_quark(), msg, 0)
           return procedure.new_return_values(Gimp.PDBStatusType.CALLING_ERROR, error)
       else:
           drawable = drawables[0]

       # Récupère les valeurs des paramètres de la configuration
       target_color_rgba = config.get_property("target-color")
       # Convertit la couleur RGBA 64 bits en Gimp.RGB pour un accès facile
       target_color_gimp_rgb = Gimp.RGB()
       target_color_gimp_rgb.parse_rgba(target_color_rgba)
       
       target_r = target_color_gimp_rgb.red_int
       target_g = target_color_gimp_rgb.green_int
       target_b = target_color_gimp_rgb.blue_int

       tolerance = config.get_property("tolerance")
       operation_type = config.get_property("operation-type")

       # Début de l'opération GIMP (pour l'historique d'annulation)
       image.undo_group_start()
       Gimp.progress_init(_("Traitement de l'image..."))

       # Assurez-vous que le calque a un canal alpha pour la transparence
       if not drawable.has_alpha():
           drawable.add_alpha()

       # --- Étape 1 : Rendre transparent les pixels hors couleur cible ---
       width = drawable.get_width()
       height = drawable.get_height()
       
       # Utilisation de Gegl.Buffer pour un accès aux pixels plus performant et moderne
       # Obtient le buffer du calque (le contenu des pixels)
       buffer = drawable.get_buffer()
       # Crée un buffer d'ombre pour les modifications (meilleure pratique pour les plugins)
       shadow_buffer = drawable.get_shadow_buffer()

       # Accès direct aux pixels via Gegl.Buffer.get_pixel() et Gegl.Buffer.set_pixel()
       # C'est plus lent que les opérations GEGL natives, mais plus simple pour ce type de logique
       # Pour des performances extrêmes sur de très grandes images, il faudrait utiliser des opérations GEGL complètes.

       for y in range(height):
           Gimp.progress_update(float(y) / height) # Met à jour la barre de progression
           for x in range(width):
               # Récupère le pixel du buffer original
               pixel_data = buffer.get_pixel(x, y)
               # Les données de pixel sont un tuple (r, g, b, a) où chaque composante est un float de 0.0 à 1.0
               r, g, b, a = pixel_data[0], pixel_data[1], pixel_data[2], pixel_data[3]

               # Convertit les floats (0.0-1.0) en entiers (0-255) pour la comparaison de tolérance
               current_r = int(r * 255)
               current_g = int(g * 255)
               current_b = int(b * 255)
               
               # Calculer la différence de couleur (distance euclidienne)
               diff = math.sqrt((current_r - target_r)**2 + (current_g - target_g)**2 + (current_b - target_b)**2)

               if diff > tolerance:
                   # Rendre le pixel transparent (alpha = 0.0)
                   shadow_buffer.set_pixel(x, y, (r, g, b, 0.0))
               else:
                   # Conserver le pixel tel quel
                   shadow_buffer.set_pixel(x, y, (r, g, b, a))
       
       # Applique les modifications du buffer d'ombre au calque
       drawable.merge_shadow(True)
       # Met à jour la zone modifiée pour l'affichage
       drawable.update(0, 0, width, height)


       # --- Étape 2 : Régulariser la forme restante ---
       # Utilisation des fonctions PDB de GIMP pour les opérations de sélection et de remplissage

       if operation_type == 1: # Érosion de la sélection
           # Crée une sélection à partir du canal alpha du calque
           image.set_selection_mask(drawable.get_alpha_mask())
           # Rétrécit la sélection
           Gimp.selection_shrink(image, 2) # Rétrécir de 2 pixels
           # Inverse la sélection pour remplir l'extérieur
           image.invert_selection()
           # Remplir la sélection inversée avec de la transparence
           drawable.fill(Gimp.FillType.TRANSPARENT)
           # Désélectionne tout
           image.set_selection_mask(None)

       elif operation_type == 2: # Dilatation de la sélection
           image.set_selection_mask(drawable.get_alpha_mask())
           # Agrandit la sélection
           Gimp.selection_grow(image, 2) # Agrandir de 2 pixels
           image.invert_selection()
           drawable.fill(Gimp.FillType.TRANSPARENT)
           image.set_selection_mask(None)
           
       # Rafraîchir l'affichage de toutes les fenêtres GIMP
       Gimp.displays_flush()
       image.undo_group_end() # Fin de l'opération GIMP (pour l'historique d'annulation)
       Gimp.progress_end()

       # Retourne les valeurs de succès
       return procedure.new_return_values(Gimp.PDBStatusType.SUCCESS, GLib.Error())

# Enregistre le plugin dans GIMP
Gimp.main(CleanAndRegularize.__gtype__, sys.argv)

Here's a Python script that's supposed to:
- select a color from an image
- make other colors transparent except for very similar ones
- smooth (delete, add pixels) in the remaining areas so that the angles are sharp in detail

I placed this script in a folder with the same name, but the Gimp3 console returns some errors
Can you fix this script?

thanks

Print this item

  3.0.4 Crashes when drag and drop an image
Posted by: kayalif - 07-10-2025, 11:26 AM - Forum: Gimp 2.99 & Gimp 3.0 - Replies (9)

Greetings everyone! 
Dragging and dropping images to GIMP cause crash. Similar topics have been opened before, but I don't know what the latest situation is.

   

Print this item

  technology against mosquitoes
Posted by: denzjos - 07-10-2025, 06:17 AM - Forum: Watercooler - Replies (2)

https://newatlas.com/around-the-home/pho...osquitoes/

Print this item

  script does not appears in Gimp3 filters
Posted by: Zydelum - 07-10-2025, 01:01 AM - Forum: Extending the GIMP - Replies (2)

Hi,

On macOS, this minimalist Python script for Gimp3 doesn't appear in Gimp3 Filters

I placed this script in Plugins and then made it executable.

Why?

Code:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import gi
gi.require_version('Gimp', '3.0')
from gi.repository import Gimp
from gi.repository import GLib
import sys

def N_(message): return message
def _(message): return GLib.dgettext(None, message)

class MinimalTest (Gimp.PlugIn):
   def do_query_procedures(self):
       return [ "plug-in-minimal-test" ]

   def do_create_procedure(self, name):
       procedure = Gimp.ImageProcedure.new(self, name,
                                           Gimp.PDBProcType.PLUGIN,
                                           self.run, None)
       procedure.set_image_types("*")
       procedure.set_menu_label(_("Minimal Python 3 Test"))
       procedure.add_menu_path('<Image>/Filters/Development/My Minimal Tests/')
       procedure.set_documentation(_("A very minimal test for Python 3 plugins."),
                                   _("A very minimal test for Python 3 plugins."),
                                   name)
       procedure.set_attribution("Your Name", "Your Name", "2025")
       return procedure

   def run(self, procedure, run_mode, image, drawables, config, run_data):
       Gimp.message("Minimal Python 3 Test Loaded Successfully!")
       return procedure.new_return_values(Gimp.PDBStatusType.SUCCESS, GLib.Error())

Gimp.main(MinimalTest.get_type(), sys.argv)

Print this item

Photo GEGL Plugins for GIMP 3.0.4 and GIMP 2.10.38
Posted by: BeaverGEGLFreak - 07-09-2025, 10:55 PM - Forum: Extending the GIMP - Replies (1)

Download GEGL plugins here
https://github.com/LinuxBeaver/LinuxBeaver/releases/


Hello, Its me LinuxBeaver the GEGL plugin guy who is obsessed with everything GEGL. I am here to share my GEGL plugins, as these pic show I make GEGL plugins for GIMP that do text styling and background design as well as more special effects all non-destructive and re-editable of course on GIMP 3. These plugins are recommended to be used on GIMP 3.0.4 but also work on 2.10


[Image: 463579721-00f9f7e3-31f3-419d-a033-15b99a...UxAvMOBvXA]

 background design

[Image: 431530020-827667d9-f62a-4ecb-b795-8a5327...lYxmevJjnc]




There is around 125 natural GEGL plugins total and they can all be downloaded here

https://github.com/LinuxBeaver/LinuxBeaver/releases/


Users have the option to choose between source code, windows and linux binaries as well as a choice between the top 50 plugins or all 125 plugins.

Also users may visit an individual plugin download page like

https://github.com/LinuxBeaver/GEGL-GIMP.../releases/

and download a plugin individually.


GEGL Plugins DO NOT go in the normal GIMP plugins folder instead they go in places like this

Windows

Code:
C:\Users\(USERNAME)\AppData\Local\gegl-0.4\plug-ins

 
Linux


Code:
 ~/.local/share/gegl-0.4/plug-ins



Linux (Flatpak includes Chromebook)

Code:
~/.var/app/org.gimp.GIMP/data/gegl-0.4/plug-ins


then restart GIMP and go to "GEGL operation" to find the new plugins if on GIMP 2.10 or if on GIMP 3 look in the menu under filters>render>text styling, filters>text styling and other places.


Also if you didn't notice there are also about 50 more AI generated GEGL plugins on a seperate download page but I really don't like to endorse them. They were made by a machine machine not me, and they are separate from the normal download. You can still check them out of you want they go in the same folder.

Print this item

  GIMP - 3.0.4 - perspective transformation
Posted by: MichalStanczyk - 07-09-2025, 12:02 PM - Forum: Gimp 2.99 & Gimp 3.0 - Replies (1)

Hi everyone

I installed the new version 3.0.4 and immediately encountered a problem with perspective transformation. It leaves black areas that should be transparent, leaving the background layer visible.

Could anyone point me to a solution? This wasn't an issue in the old version, so I hope it's just a matter of changing the settings.

Thank you for your help.


Print this item

  Switching off a drop-list of files
Posted by: rafael_abelyar - 07-08-2025, 09:56 PM - Forum: General questions - Replies (1)

How I can prevent appearing drop-list of files when saving or exporting? That annoys much.

Print this item

  Gimp 3 - hand shaped cursor and incomplete translations
Posted by: Thomasson - 07-08-2025, 05:15 AM - Forum: Gimp 2.99 & Gimp 3.0 - Replies (2)

I have installed tha latest version of Gimp and noticed 2 irritating issues.
1. The mouse cursor changes from arrow into hand in dialog boxes, e.g. when I want to change the color temperature. I have searched in Google and found a sucesful solution https://www.reddit.com/r/GIMP/comments/1...nd_cursor/
I have moved the original grab.cur and grabbing.cur int a new folder, copied Windows'
aero_arrow.cur into the Gimp folder, renamed it into grab.cur,  pasted aero once again and renamed it into grabbing cur. When I restarted Gimp the irritating hand disappered :Smile
2. Tne new version of Gimp is not fully trnaslated into Polish. So I set the app language int English.



Attached Files Thumbnail(s)
   
Print this item

  Layer Mode List in Gimp3
Posted by: daiappy - 07-07-2025, 10:30 PM - Forum: General questions - Replies (3)

Hello. I'm on Win11. As a long time user of Gimp I'm trying to get my head round Gimp 3. Here are a few Q's and suggestions.
1) In the Layer Mode dropdown list is there a way to: a) reduce the space between each Mode so that all the Modes are visible to choose from? & b) if I choose a Layer Mode from near the bottom of the list, is there a way to return quickly to the top of the list without the need to use the mouse wheel which goes so slowly? If I could see all the Modes I could just click on the top one. This is especially tedious when using Curves.
2) when I do an action/adjustment on a layer, (Curves/Crop etc) I need to keep constantly clicking the Image Window to reactivate it. It wasn't as necessary in Gimp 2.
3) I do like the new 'Save Settings' in the Add Border Filter. Perhaps in the future we will be able to save more than one Add Border setting?
But I do like the NDL's. Thanks to all the devs who have worked towards Gimp 3.
Charles.

Print this item