2017-05-30 2 views
0

Le code suivant est utilisé pour aligner la couche par rapport à la couche d'arrière-plan.Gimp, python-fu: Aligne la couche par rapport au calque d'arrière-plan dans l'image

import os  
from gimpfu import * 
import gimpfu  
import logging 

def scale(logo, tdrawable, imageName): 
    logger = logging.getLogger() 
    logger.info('got logo file {0}'.format(imageName))  
    newImage = pdb.gimp_image_new(450, 300, RGB)  
    newLayer = pdb.gimp_layer_new(newImage, 450, 300, 0, "background", 100.0, NORMAL_MODE) 

    pdb.gimp_context_set_background((255, 255, 255)) 
    # pdb.gimp_context_set_foreground((255, 255, 255)) 
    pdb.gimp_drawable_fill(newLayer, gimpfu.BACKGROUND_FILL) 
    logger.info('Created new background image {0}') 
    newImage.add_layer(newLayer, 0) 

    logger.info('loading logo {0}'.format(imageName)) 
    logo = pdb.gimp_file_load(imageName, imageName) 
    visibleLayer = pdb.gimp_layer_new_from_visible(logo, newImage, 'logo') 
    pdb.gimp_image_add_layer(newImage, visibleLayer, 0) 


    logger.info('Scaling logo to 435 width') 
    pdb.gimp_layer_scale(visibleLayer, 435, 100, True) 

    # logger.info('Align logo to background image') 
    pdb.plug_in_align_layers(newImage, tdrawable, True, True) 

    flattenedLayer = pdb.gimp_image_flatten(newImage) 

    fileNameNoExt = os.path.splitext(imageName)[0] 
    pdb.file_jpeg_save(newImage, flattenedLayer, fileNameNoExt + '.jpg', fileNameNoExt + '.jpg', 1.0, 0.0, 1, 1, '', 0, 0, 0, 0) 

register(
    "scale_logo", 
    "Exports logo in jpeg format after custom scaling", 
    "Exports logo in jpeg format after custom scaling", 
    "", 
    "", 
    "2017", 
    "<Image>/Image/Scale logo...", 
    "RGB*, GRAY*", 
    [ 
     (PF_STRING, 'file_name', 'file_name', 'logo.png')], 
    [], 
    scale) 

main() 

ligne prévue pdb.gimp_layer_scale(visibleLayer, 435, 100, True) pour faire le travail, mais le fichier résultant contient la couche logo dans le coin supérieur gauche de la couche blanche de fond. Comment aligner correctement la couche par rapport à la couche de fond inférieure?

+1

Compute où devrait être le coin de la couche réduite: (ImageWidth- LogoWidth, ImageHeight-LogoHeight, et déplacez la couche logo là en changeant ses décalages X, Y. – xenoid

+0

merci, ça a marché – user1264304

Répondre

0

La réaction suivante a fonctionné pour moi. Merci xenoid pour la suggestion dans les commentaires

import os  
from gimpfu import * 
import gimpfu  
import logging 
def scale(logo, tdrawable, imageName): 
    logger = logging.getLogger() 
    logger.info('got logo file {0}'.format(imageName)) 

    newImage = pdb.gimp_image_new(450, 300, RGB) 

    newLayer = pdb.gimp_layer_new(newImage, 450, 300, 0, "background", 100.0, NORMAL_MODE) 

    pdb.gimp_context_set_background((255, 255, 255)) 
    pdb.gimp_drawable_fill(newLayer, gimpfu.BACKGROUND_FILL) 
    logger.info('Created new background image {0}') 
    newImage.add_layer(newLayer, 0) 

    logger.info('loading logo {0}'.format(imageName)) 
    logo = pdb.gimp_file_load(imageName, imageName) 

    visibleLayer = pdb.gimp_layer_new_from_visible(logo, newImage, 'logo') 
    pdb.gimp_image_add_layer(newImage, visibleLayer, 0) 

    logger.info('Scaling logo to 435 width, 100 height') 
    pdb.gimp_layer_scale(visibleLayer, 435, 100, True) 

    logger.info('Align logo to background image') 
    offx = (newLayer.width - visibleLayer.width)/2 
    offy = (newLayer.height - visibleLayer.height)/2 
    pdb.gimp_layer_set_offsets(visibleLayer, offx, offy) 
    logger.info('Sharpening logo') 
    pdb.plug_in_unsharp_mask(None, visibleLayer, 100.0, 0.5, 0) 

    logger.info('Flatten all visible layers into a single layer') 
    flattenedLayer = pdb.gimp_image_flatten(newImage) 

    fileNameNoExt = os.path.splitext(imageName)[0] 
    pdb.file_jpeg_save(newImage, flattenedLayer, fileNameNoExt + '.jpg', fileNameNoExt + '.jpg', 1.0, 0.0, 1, 1, '', 0, 0, 0, 0) 

register(
    "scale_logo", 
    "Exports logo in jpeg format after custom scaling", 
    "Exports logo in jpeg format after custom scaling", 
    "", 
    "", 
    "2017", 
    "<Image>/Image/Scale logo...", 
    "RGB*, GRAY*", 
    [ 
     (PF_STRING, 'file_name', 'file_name', 'logo.png')], 
    [], 
    scale) 

main() 

Pour l'exécuter on a besoin d'utiliser la séquence de commande bash suivante:

cp scaleAndSharpenLogo.py /usr/lib/gimp/2.0/plug-ins/scaleAndSharpenLogo.py; gimp --no-interface -b '(python-fu-scale-logo RUN-NONINTERACTIVE 0 0 "logo.png")' -b '(gimp-quit 0)'