2017-05-05 61 views
0

我的目標是將一個圖像放在另一個圖像上並將生成的圖像保存爲jpeg文件。 第一個是新的,它有450x300尺寸和白色背景。第二個從文件加載,其可見部分作爲圖層添加到第一個。gimp,python-fu:RuntimeError:pdb.gimp_image_merge_down中的執行錯誤

我已經通過

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

回報

(gimp:4224): GLib-CRITICAL **: g_error_new_literal: assertion 'domain != 0' failed Traceback (most recent call last): File "/usr/lib/gimp/2.0/python/gimpfu.py", line 821, in _run return apply(func, params[1:]) File "/usr/lib/gimp/2.0/plug-ins/my.py", line 31, in scale finalLayer = pdb.gimp_image_merge_down(newImage,tdraw,1) RuntimeError: execution error batch command experienced an execution error: Error: (: 1) Procedure execution of python-fu-my failed

增加了以下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_image_merge_down導致logo.jpeg與450白色背景,300大小

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)導致 1):由xenoid 以下建議給定爲輸入的原始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) 
+0

你寫的東西不應該放在/usr/lib/gimp/2.0/plug-ins中,而應放在〜/ .gimp-2.8/plug-ins中(注意前導點,告訴探測器顯示隱藏文件) 。或者你把它放在更多「可見」目錄下,並在「編輯>首選項>文件夾>插件」中添加該目錄。您還可以在〜/ .gimp-2.8/plug-ins中添加一個到文件實際位置的軟鏈接。 – xenoid

回答

1

此:

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

層不添加作爲最高之一,但根據現行的頂部之一。如果它是第二層,那麼它將成爲最底層的一層。在這種情況下,merge_down沒有任何合併。

+0

謝謝,那麼你如何正確地完成任務? – user1264304

+1

將merge_down應用於其他圖層,或使用'newImage.add_layer(tdraw,0)'將圖層添加爲頂層。 – xenoid

+0

嗨,謝謝。我嘗試了你的建議,但沒有成功。也許,我想念你。 ( – user1264304