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

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

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

预期的行pdb.gimp_layer_scale(visibleLayer, 435, 100, 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()

要运行它,需要使用以下 bash 命令序列:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

GIMP Python插件可将2个图像作为图层加载

来自分类Dev

Gimp:将每个图层导出为单独的PNG图像

来自分类Dev

Gimp:将每个图层导出为单独的PNG图像

来自分类Dev

如何使用script-fu / scheme在gimp图像上设置图层透明填充

来自分类Dev

Gimp将所有图层保存到具有图层大小的文件中

来自分类Dev

Gimp将所有图层保存到具有图层大小的文件中

来自分类Dev

将图层移动半像素(GIMP)

来自分类Dev

Gimp:将图像(来自剪贴板)粘贴为新图层,然后将文档裁剪为该图层的大小吗?

来自分类Dev

获取GIMP 2中的图层偏移值

来自分类Dev

从Python脚本/插件关闭GIMP图像

来自分类Dev

Gimp菜单中未显示Python-fu脚本

来自分类Dev

Python-fu插件在Gimp中不可见

来自分类Dev

在Python中实现Gimp的亮度层模式

来自分类Dev

在Python中实现Gimp的亮度层模式

来自分类Dev

如何在倾斜图层(CSS)中倾斜背景图像?

来自分类Dev

如何在gimp 2.8中的图像或画布之间复制图层?

来自分类Dev

如何在GIMP 2.8.16中将gif的图层另存为单独的文件?

来自分类Dev

如何通过Gimp从Shell执行Python-Fu脚本

来自分类Dev

如何通过Gimp从Shell执行Python-Fu脚本

来自分类Dev

有什么方法可以在GIMP中“使图层适合画布大小”?

来自分类Dev

在gimp中将python png图像加载为rgb图像

来自分类Dev

然后通过内置GUI在GIMP中使用python-fu缩放图像速度较慢

来自分类Dev

Gimp批处理作为图层打开

来自分类Dev

在Konva图层或舞台中使用背景图像

来自分类Dev

Gimp:如何使用python脚本将没有色彩空间信息的图像导出到BMP?

来自分类Dev

如果调用了某些pdb方法,GIMP Python-Fu插件将不会注册

来自分类Dev

GIMP:编辑.psd文件,将单个图层另存为PNG

来自分类Dev

python tkinter canvas将背景图像放在中心

来自分类Dev

如何在Gimp中的鼠标光标下选择一个“坐着”的图层?

Related 相关文章

  1. 1

    GIMP Python插件可将2个图像作为图层加载

  2. 2

    Gimp:将每个图层导出为单独的PNG图像

  3. 3

    Gimp:将每个图层导出为单独的PNG图像

  4. 4

    如何使用script-fu / scheme在gimp图像上设置图层透明填充

  5. 5

    Gimp将所有图层保存到具有图层大小的文件中

  6. 6

    Gimp将所有图层保存到具有图层大小的文件中

  7. 7

    将图层移动半像素(GIMP)

  8. 8

    Gimp:将图像(来自剪贴板)粘贴为新图层,然后将文档裁剪为该图层的大小吗?

  9. 9

    获取GIMP 2中的图层偏移值

  10. 10

    从Python脚本/插件关闭GIMP图像

  11. 11

    Gimp菜单中未显示Python-fu脚本

  12. 12

    Python-fu插件在Gimp中不可见

  13. 13

    在Python中实现Gimp的亮度层模式

  14. 14

    在Python中实现Gimp的亮度层模式

  15. 15

    如何在倾斜图层(CSS)中倾斜背景图像?

  16. 16

    如何在gimp 2.8中的图像或画布之间复制图层?

  17. 17

    如何在GIMP 2.8.16中将gif的图层另存为单独的文件?

  18. 18

    如何通过Gimp从Shell执行Python-Fu脚本

  19. 19

    如何通过Gimp从Shell执行Python-Fu脚本

  20. 20

    有什么方法可以在GIMP中“使图层适合画布大小”?

  21. 21

    在gimp中将python png图像加载为rgb图像

  22. 22

    然后通过内置GUI在GIMP中使用python-fu缩放图像速度较慢

  23. 23

    Gimp批处理作为图层打开

  24. 24

    在Konva图层或舞台中使用背景图像

  25. 25

    Gimp:如何使用python脚本将没有色彩空间信息的图像导出到BMP?

  26. 26

    如果调用了某些pdb方法,GIMP Python-Fu插件将不会注册

  27. 27

    GIMP:编辑.psd文件,将单个图层另存为PNG

  28. 28

    python tkinter canvas将背景图像放在中心

  29. 29

    如何在Gimp中的鼠标光标下选择一个“坐着”的图层?

热门标签

归档