首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gimp,python: RuntimeError: pdb.gimp_image_merge_down中的执行错误

Gimp,python: RuntimeError: pdb.gimp_image_merge_down中的执行错误
EN

Stack Overflow用户
提问于 2017-05-05 19:41:15
回答 1查看 720关注 0票数 0

我的目标是将一个图像放在另一个图像上,并将结果图像保存为jpeg文件。第一个是新的,它有450x300维和白色背景。第二部分从文件中加载,其可见部分作为一层添加到第一层。

我将以下python脚本添加到/usr/lib/gimp/2.0/插件文件夹中

代码语言:javascript
复制
#!/usr/bin/python
import os

from gimpfu import *
import gimpfu

import logging
def scale(timg, 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)

    timg = pdb.gimp_file_load(imageName, imageName)

    tdraw = pdb.gimp_layer_new_from_visible(timg, newImage, 'logo')      
    newImage.add_layer(tdraw, 1)
    finalLayer = pdb.gimp_image_merge_down(newImage,tdraw,1)
    fileNameNoExt = os.path.splitext(imageName)[0]
    pdb.file_jpeg_save(newImage, finalLayer, fileNameNoExt + '.jpg', fileNameNoExt + '.jpg', 1.0, 0.0, 1, 1, '', 0, 0, 0, 0)

运行通过

代码语言:javascript
复制
gimp --no-interface -b '(python-fu-my RUN-NONINTERACTIVE 0 0 "logo.png")' -b '(gimp-quit 0)'

返回

(gimp:4224):GLib-关键**:g_error_new_literal:断言‘域!= 0’失败的跟踪(最近一次调用):文件"/usr/lib/gimp/2.0/python/gimpfu.py",第821行,在_run返回apply(func,params1:) _run中“/usr/lib/gimp/2.0/plug/my.py”,第31行,按比例finalLayer = pdb.gimp_image_merge_down(newImage,tdraw,1) RuntimeError:执行错误批处理命令经历了一个执行错误:错误:(:1) python的过程执行失败

怎么啦?如何正确地做好这件事,了解问题的根本原因。

编辑。以下是xenoid的建议: 1)使用gimp_image_merge_down会产生白色背景为450,300的logo.jpeg

代码语言:javascript
复制
def my(timg, 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)
    # logoDrawable = pdb.gimp_image_get_active_layer(logo)

    #
    visibleLayer = pdb.gimp_layer_new_from_visible(logo, newImage, 'logo')
    newImage.add_layer(visibleLayer, 1)
    mergedL = pdb.gimp_image_merge_down(newImage, newLayer, 0)

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

2)使用newImage.add_layer(visibleLayer,0)以jpg格式存储原始png图像作为输入。

代码语言:javascript
复制
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)
    # logoDrawable = pdb.gimp_image_get_active_layer(logo)

    #
    visibleLayer = pdb.gimp_layer_new_from_visible(logo, newImage, 'logo')
    newImage.add_layer(visibleLayer, 0)
    # mergedL = pdb.gimp_image_merge_down(newImage, newLayer, 0)

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

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-05 23:18:44

这是:

代码语言:javascript
复制
tdraw = pdb.gimp_layer_new_from_visible(timg, newImage, 'logo')      
newImage.add_layer(tdraw, 1)

不将图层作为顶部添加,而是在现有的顶层添加。如果它是第二层,那么它就变成了底部层。在这种情况下,merge_down没有什么可合并的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43812663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档