[태그:] gimp

  • gimp python-fu 사용

    gimp를 사용하면, 마우스를 많이 클릭해야 한다. 대부분 노가다인데, python-fu를 사용하면 반복 작업을 대폭 줄일 수 있다.

    필터 메뉴에서 python 콘솔을 열 수 있다. 해당 코드를 테스트할 경우 유용하나, 약간 긴 코드의 경우 script 파일을 만들어 실행함이 편하다. 다른 파일의 탭을 콘솔에 붙일 수 없다.

    코드를 만든 후, 아래 옵션으로 실행이 가능하다. 여기를 참조했다.

    Execute 2: gimp -idf --batch-interpreter=python-fu-eval -b - < save-xcf-to-png-02.py

    • 배치 인터프리터를 python-fu 설정.
    • 입력으로 스크립트 설정.

    아래 참조한 사이트에 있는  save-xcf-to-png-02.py 파일이다.

    # Note required here, see: /usr/lib/gimp/2.0/plug-ins/python-eval.py
    # from gimpfu import *
    from glob import glob
    
    def convert(filename):
      print "Filename: " + filename
      img = pdb.gimp_file_load(filename, filename)
      new_name = filename.rsplit(".",1)[0] + ".png"
      layer = pdb.gimp_image_merge_visible_layers(img, 1)
    
      pdb.gimp_file_save(img, layer, new_name, new_name)
      pdb.gimp_image_delete(img)
    
    for filename in glob("*.xcf"):
      convert(filename)
    
    pdb.gimp_quit(1)
    

    내가 하려는 작업은 2개 점이 찍힌 레이어를 랜덤수치만큼 이동하여 약 100개정도 이미지를 만듦이다. gimp 이미지 원본 파일에 배경, 점이 찍힌 레이어가 있다. 아래와 같이 간단한 코드로 50개를 금방 만들 수 있다.

    #-*- coding: utf-8 -*-
    import random
    from gimpfu import *
    
    #python-fu console에 직접 붙일 수 없어 아래 방식으로 명령어 실행.
    #>> gimp -idf --batch-interpreter=python-fu-eval -b -< !!!!!여기에 파일 이름 입력!!!
    
    i=0
    
    img = pdb.gimp_file_load("/home/now0930/gimpScript/basicForm.xcf","/home/now0930/gimpScript/basicForm.xcf")
    
    
    #점 2개가 찍힌 레이어. 점 2개를 임의의 위치로 이동.
    layer = img.layers[1]
    
    for i in range(1,50):
        x_new = random.randrange(-5,5)
        y_new = random.randrange(-5,5)
        x_off, y_off = layer.offsets
    
        pdb.gimp_layer_translate(layer, x_new-x_off, y_new-y_off)
    
        new_image = pdb.gimp_image_duplicate(img)
        new_layer = pdb.gimp_image_merge_visible_layers(new_image, CLIP_TO_IMAGE)
        i=i+1
        filename = '/home/now0930/gimpScript/Spec2/spec%d.png'%(i,)
        pdb.gimp_file_save(new_image, new_layer, filename,'?')
        pdb.gimp_image_delete(new_image)
    
        #원래 위치로 이동.
        pdb.gimp_layer_translate(layer, x_new+x_off, y_new+y_off)
    

    파일 이름을 입력으로 하는 방법도 있겠지만, 나만 쓸 스크립트이므로, 그냥 직접 경로를 넣었다.