簡體   English   中英

Gimp,python-fu:RuntimeError:pdb.gimp_image_merge_down中的執行錯誤

[英]Gimp, python-fu: RuntimeError: execution error in pdb.gimp_image_merge_down

我的目標是將一個圖像放在另一個圖像上,並將結果圖像另存為jpeg文件。 第一個是新的,它具有450x300尺寸和白色背景。 第二個文件從文件加載,其可見部分作為圖層添加到第一個文件中。

我已將以下python腳本添加到/usr/lib/gimp/2.0/plug-ins文件夾

#!/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)

通過運行

gimp --no-interface -b '(python-fu-my RUN-NONINTERACTIVE 0 0 "logo.png")' -b '(gimp-quit 0)'

退貨

(gimp:4224):嚴重問題**:g_error_new_literal:斷言'domain!= 0'失敗,回溯(最近一次調用最近):文件“ /usr/lib/gimp/2.0/python/gimpfu.py”,行821 ,在_run中返回apply(func,params [1:])文件“ /usr/lib/gimp/2.0/plug-ins/my.py”,第31行,比例為finalLayer = pdb.gimp_image_merge_down(newImage,tdraw,1 )RuntimeError:執行錯誤批處理命令遇到執行錯誤:錯誤:(:1)python-fu-my的過程執行失敗

怎么了? 如何正確執行並了解問題的根本原因。

編輯。 xenoid的以下建議:1)使用gimp_image_merge_down生成帶有450、300大小的白色背景的logo.jpeg

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)會產生原始png圖像,以jpg格式存儲為輸入

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)

這個:

tdraw = pdb.gimp_layer_new_from_visible(timg, newImage, 'logo')      
newImage.add_layer(tdraw, 1)

不會將圖層添加為頂層,而是添加到現有頂層之下。 如果它是第二層,那么它將成為底層。 在那種情況下, merge_down沒有任何要合並的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM