2017-03-19 1 views
0

J'ai créé une image dans GIMP 2.8 avec plusieurs chemins en utilisant Select -> To Path. Maintenant, je veux créer un script Python qui parcourra tous ces chemins, faire une sélection en fonction de chaque chemin, couper la sélection à une nouvelle image, faire des choses supplémentaires, et enregistrer chaque découpe dans une image PNG séparée .GIMP Python, la sélection basée sur le chemin n'est pas la même que celle du menu "From Path"

Jusqu'à présent, j'ai ce script Python, que je peux commencer à partir Filters -> Paths comme un élément de menu:

#!/usr/bin/env python 
# coding: utf-8 

from gimpfu import * 
import os 

def export_paths_to_pngs(img, layer, path, vis): 

    # get all paths (internally called "vectors") 
    cnt, vectors = pdb.gimp_image_get_vectors(img) 
    if (cnt > 0): 
     # iterate all paths 
     for n in vectors: 
      v = gimp.Vectors.from_id(n) 
      # only visible paths 
      if (v.visible): 
       st = v.strokes 
       sufix = 0 
       # iterate all strokes in vector 
       for ss in st: 
        type, num_pnts, cntrlpnts, closed = pdb.gimp_vectors_stroke_get_points(v, ss.ID) 
        pdb.gimp_image_select_polygon(img, CHANNEL_OP_REPLACE, len(cntrlpnts), cntrlpnts) 

# tell gimp about our plugin 
register(
    "python_fu_export_paths_to_png", 
    "Export paths as png files", 
    "Export paths as png files", 
    "BdR", 
    "BdR", 
    "2017", 
    "<Image>/Filters/Paths/Export paths to png", # menu path 
    "", # Create a new image, don't work on an existing one 
    [ 
     (PF_DIRNAME, "export_directory", "Export destination directory", "/tmp"), 
     (PF_TOGGLE, "p2", "TOGGLE:", 1)  
    ], 
    [], 
    export_paths_to_pngs 
) 

main() 

Cependant, le problème est que la fonction python gimp_image_select_polygon ne fait pas de sélection comme prévu . La sélection semble avoir quelques différences dans les courbes de Bézier (ou quelque chose comme ça) qui n'est pas exactement le même que le chemin sur lequel elle est basée. D'autre part, l'élément de menu From Path fonctionne correctement, il fait une sélection parfaite basée sur le chemin. Voir image ci-dessous:

enter image description here

Mes questions sont les suivantes:

  1. Quelle est la différence entre l'élément de menu Select -> From Path et la fonction GimpPython gimp_image_select_polygon
  2. Suis-je utiliser la fonction gimp_image_select_polygon de manière incorrecte, ou Y at-il une autre fonction que je devrais utiliser?
  3. A défaut, est-il possible d'appeler en quelque sorte l'élément de menu From Path directement à partir de Python?

Répondre

1

Ne pas utiliser

pdb.gimp_image_select_polygon(...) 

qui vise à créer une sélection polygonale (comme la sélection Freehand en mode "polygone"). Vous devriez utiliser

pdb.gimp_image_select_item(image,CHANNEL_OP_REPLACE,path) 

(sur le chemin entier, pas besoin de le faire coup par coup). PS: votre code pour itérer sur les chemins est très artificiel. Il est normalement aussi simple que:

for v in img.vectors: 
    if v.visible: 
+0

Merci 'pdb.gimp_image_select_item' est exactement ce que je cherchais. Et aussi merci de souligner la boucle 'for' simplifiée. – BdR