2013-03-18 2 views
4

У меня проблемы с сохранением изображений в python через GIMP. Я могу получить изображение и применить эффекты, которые хочу, но когда я иду на сохранение, он сохраняет только один слой и не все (ПРИМЕЧАНИЕ: фон прозрачный), и поскольку фон прозрачен, я не могу заставить его ничего не сохранять прозрачный фон. Код, я использую размещена ниже:GIMP Экспорт файла экспорта Python-fu экспортирует только прозрачный слой

image_array = gimp.image_list() 
i=0 
for image in image_array: 
    img = image_array[i] 
    layers = img.layers 
    last_layer = len(layers)-1 
    try: 
     disable=pdb.gimp_image_undo_disable(img) 
     pdb.gimp_layer_add_alpha(layers[0]) 
     drw = pdb.gimp_image_active_drawable(img) 
     pdb.plug_in_colortoalpha(img,drw,(0,0,0)) 
     drw = pdb.gimp_image_active_drawable(img) 
     enable = pdb.gimp_image_undo_enable(img) 

    except: 
     print "ERROR" 

    pdb.file_png_save(img, drw, "C:\\Users\\jammer\\Desktop\\test.png", 
         "test.png",0,9,1,1,1,1,1) 
    i+=1 

Я также попытался file_png_save2, но у меня есть чувство, проблема заключается в объекте DRW как я просто хочу, чтобы повторить вариант щелкать Файл-> Экспорт и сохранить как PNG, не делая этого через GUI. Я бы предпочел, чтобы он автоматически сохранялся (у меня есть 49 изображений, и каждый будет называться автоматически, но сначала мне нужно, чтобы он правильно экспортировал одно изображение). как я уже говорил, вышеприведенный код только экспортирует прозрачный фон, даже переход на GIF не решает проблему. Как экспортировать файл в формате PNG, сохраняя все слои и прозрачный фон?

ответ

3

Я нашел свою проблему! Я не сливал видимые слои и не устанавливал их равными новому слою, который затем я использовал в качестве «вытачиваемого объекта» при сохранении изображения в виде png! Я отправил фиксированный код ниже:

image_array = gimp.image_list() 
i=0 
for image in image_array: 
    img = image_array[i] 
    layers = img.layers 
    last_layer = len(layers)-1 
    try: 
     disable=pdb.gimp_image_undo_disable(img) 
     pdb.gimp_layer_add_alpha(layers[0]) 
     drw = pdb.gimp_image_active_drawable(img) 
     pdb.plug_in_colortoalpha(img,drw,(0,0,0)) 
     layer = pdb.gimp_image_merge_visible_layers(img, gimpfu.CLIP_TO_IMAGE)#FIXES PROBLEM OF ONLY EXPORTING TRANSPARENCY! 
     enable = pdb.gimp_image_undo_enable(img) 

    except: 
     print "ERROR" 

    pdb.file_png_save2(img, layer, "C:\\Users\\jammer\\Desktop\\test.png","test.png",1,9,1,1,1,1,1,0,1) 
    i+=1 
+0

Объединения всех слоев является способом сделать это - но вы только хотите, чтобы в тех случаях, как в ваших, где изображение «одноразовое» - После слияния слоев есть нет возврата (в GIMP нет вызова «отменить»). Обычным подходом является вызов 'pdb.gimp_image_duplicate' и выполнение слияния слоя в дубликате. – jsbueno