Gimp,python fu:将图层与图像中的背景图层对齐

Gimp,python fu:将图层与图像中的背景图层对齐,python,gimp,script-fu,python-fu,gimpfu,Python,Gimp,Script Fu,Python Fu,Gimpfu,以下代码用于将图层与底部背景图层对齐 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_n

以下代码用于将图层与底部背景图层对齐

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()
导入操作系统
从gimpfu进口*
进口gimpfu
导入日志记录
def比例(徽标、tdrawable、imageName):
logger=logging.getLogger()
logger.info('got logo file{0}'。格式(imageName))
newImage=pdb.gimp_image_new(450300,RGB)
newLayer=pdb.gimp_layer_new(newImage,450300,0,“背景”,100.0,正常模式)
pdb.gimp_context_set_background((255,255,255))
#pdb.gimp_上下文_集合_前景((255,255,255))
pdb.gimp_可绘制_填充(新图层、gimpfu.BACKGROUND_填充)
logger.info('创建了新的背景图像{0}')
newImage.add_层(newLayer,0)
logger.info('正在加载徽标{0}'。格式(imageName))
logo=pdb.gimp\u文件加载(imageName,imageName)
visibleLayer=pdb.gimp_layer_new_from_visible(logo,newImage,'logo'))
pdb.gimp\u图像\u添加层(新建图像,可见层,0)
logger.info('Scaling logo to 435 width')
pdb.gimp_层_比例(visibleLayer,435100,真)
#logger.info('将徽标与背景图像对齐')
pdb.plug_in_align_图层(新图像、可绘制、真、真)
展平层=pdb.gimp\u图像展平(新图像)
FileNameNoText=os.path.splitext(imageName)[0]
pdb.file_jpeg_save(新建图像、展平层、文件名noext+'.jpg',文件名noext+'.jpg',1.0,0.0,1,1',0,0,0)
登记册(
“scale_标志”,
“自定义缩放后以jpeg格式导出徽标”,
“自定义缩放后以jpeg格式导出徽标”,
"",
"",
"2017",
“/Image/Scale徽标…”,
“RGB*,灰色*”,
[
(PF_字符串,'file_name','file_name','logo.png'),
[],
(比例)
main()
需要行
pdb.gimp\u layer\u scale(visibleLayer,435100,True)
来执行此任务,但生成的文件在背景白色层的左上角包含徽标层。
如何将图层与底部背景层正确对齐?

以下解决方案对我有效。 感谢xenoid在评论中的建议

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

计算缩放层的角点应位于何处:(ImageWidth LogoWidth,ImageHeight LogoHeight),并通过更改其X、Y偏移将徽标层移动到该位置。
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)'