以下、コードです。名前は「main01.py」としていますが、こちらは「Python-Fu」のコンソールにコピペする方ですので、名前は何でも良いです。
では、大変ですが以下コピーしてお使いください。(何かうまいファイルの配布方法が有れば良いのですが・・・)
# Ver01-24011 import os, sys, datetime # ver01 = sys.version # print (ver01) #> 2.7.18 (default, Jul 1 2023, 20:56:56) [GCC 13.1.0 64 bit (AMD64)] # 年月 NENGETU01 = (2024,1) # 年月の表示位置x-y NENGETU_POS01 = (50,50) # 年月の高さ NENGETU_HEIGHT01 = 50 # 曜日の表示位置x-y、高さ YOUB_POS01 = (80,580,30) # 数字の配置範囲 SUUJI_POS01 = (63,640,100,670) # 文字の配置位置 MOJI_POS01 = (48,682) # ワンポイントの配置範囲 POINT_POS01 = (110,650,140,680) # 枠のサイズ WAKU_SIZ01 = (100,76.7) # 数字の属性(前後月の透過率):前後月を非表示にするときはゼロに SUUJI_ZOKU01 = (50,) # 週開始曜日(月曜日=0、日曜日=6) SYUU_START01 = 6 # 文字の属性(フォント名、フォントサイズ) MOJI_ZOKU01 = ("Sans",10) # MOJI_ZOKU01 = ("IPAexGothic",10) # 年月の文字 MOJI_NEN01, MOJI_TUKI01 = "nen01.png", "tuki01.png" # ファイルの置き場所 DIR01 = "D:\calender01" # 記念日:月日、文言、ワンポイントのpng画像(だいたい正方形のpng) KINENBI01 = ( 100,5,"この行は消さないでね!","", 1,1,"","gantan.png", 1,12,"結婚記念日","tan_b01.png", 1,15,"花子誕生日","hana01.png", 1,16,"かすみ誕生日","tan.png", 2,25,"太郎誕生日","", ) # 背景になる画像ファイル F_BACK01 = os.path.join(DIR01,"calender01.png") # 出力するxcfファイル名:例:Calender202401.xcfとか F_OUT01 = os.path.join(DIR01,"Calender%d%02d.xcf" % (NENGETU01[0], NENGETU01[1])) ################# 設定ここまで #################### # 設定を辞書にまとめる CONF01 = dict(NENGETU01 = NENGETU01,NENGETU_POS01 = NENGETU_POS01, NENGETU_HEIGHT01 = NENGETU_HEIGHT01, YOUB_POS01 = YOUB_POS01, SYUU_START01 = SYUU_START01, SUUJI_POS01 = SUUJI_POS01, SUUJI_ZOKU01 = SUUJI_ZOKU01, MOJI_POS01 = MOJI_POS01, WAKU_SIZ01 = WAKU_SIZ01, POINT_POS01 = POINT_POS01, MOJI_ZOKU01 = MOJI_ZOKU01, MOJI_NEN01 = MOJI_NEN01, MOJI_TUKI01 = MOJI_TUKI01, DIR01 = DIR01, KINENBI01 = KINENBI01) sys.path.append(DIR01) import date_prc01 # 日付関係の処理(別ファイル) # ファイル関係の作成など。 img_back01 = pdb.gimp_file_load(F_BACK01, "") tmp01 = pdb.gimp_image_get_active_drawable (img_back01) pdb.gimp_xcf_save(0,img_back01, tmp01, F_OUT01, F_OUT01) XCF_OUT01 = pdb.gimp_xcf_load(0,F_OUT01,F_OUT01) # 出力するxcfを読み込み img_num01 = [] # 数字の画像を格納する配列 img_wed01 = [] # 曜日の画像を格納する配列 # 数字の画像(d01.pngとか)を配列に格納する関数 def kakunou01(): for i in range (10): in_f_nam01 = "d%02d.png" % i img_tmp01 = os.path.join(DIR01,in_f_nam01) img_num01.append(pdb.gimp_file_load(img_tmp01, "")) for i in range (7): in_f_nam01 = "wd%02d.png" % i img_tmp01 = os.path.join(DIR01,in_f_nam01) img_wed01.append(pdb.gimp_file_load(img_tmp01, "")) # 日付の数字のレイヤーを準備する関数 def lay_from_num01(i_num01, i_num02, month01, day01): i_width_num01 = pdb.gimp_image_width(i_num01) i_height_num01 = pdb.gimp_image_height(i_num01) i_width_num02 = pdb.gimp_image_width(i_num02) i_height_num02 = pdb.gimp_image_height(i_num02) if day01 >9:# 2つのを画像を1つにくっつけ名前を付ける lay01_act01 = pdb.gimp_layer_new_from_visible(i_num01,XCF_OUT01, "D%02d%02d" % (month01, day01)) pdb.gimp_image_insert_layer(XCF_OUT01,lay01_act01,None,-1) lay01_act02 = pdb.gimp_layer_new_from_visible(i_num02,XCF_OUT01, "tmp01") pdb.gimp_image_insert_layer(XCF_OUT01,lay01_act02,None,-1) takasa01 = (i_height_num01 - i_height_num02)/2 # 高さ調整 pdb.gimp_layer_set_offsets(lay01_act02, i_width_num01, takasa01) ret_layer01 = pdb.gimp_image_merge_down(XCF_OUT01, lay01_act02, 0) else:# 1つ目の画像はゼロなので無視。2桁分の空のレイヤーを作ってくっつけ名前を付ける lay01_act01 = pdb.gimp_layer_new(XCF_OUT01, i_width_num02*2, i_height_num02, 1, "D%02d%02d" % (month01, day01), 100, 0) #layer = pdb.gimp_layer_new(image, width, height, type, name, opacity, mode) pdb.gimp_image_insert_layer(XCF_OUT01,lay01_act01,None,-1) lay01_act02 = pdb.gimp_layer_new_from_visible(i_num02,XCF_OUT01, "tmp01") pdb.gimp_image_insert_layer(XCF_OUT01,lay01_act02,None,-1) takasa01 = 0 # 高さ調整(ダミー) pdb.gimp_layer_set_offsets(lay01_act02, i_width_num02/2, takasa01) ret_layer01 = pdb.gimp_image_merge_down(XCF_OUT01, lay01_act02, 0) return ret_layer01 # 文字の配置範囲(pos01)に押し込み日付を表示する関数 def lay_put_num01(CONF01): waku01 = list(date_prc01.make_waku01(CONF01)) #枠に数字と文字を入れていく for l01 in waku01: # 1行づつ読んでl01に入れる(=一枠ずつ入れていく) month01 = l01["calender_month01"] day01 = l01["calender_day01"] opacity01 = l01["opacity01"] # 日にちの関係 num_2keta = int(day01/10) num_1keta = day01 - num_2keta * 10 layer_tmp01 = lay_from_num01(img_num01[num_2keta], img_num01[num_1keta] ,month01,day01) pdb.gimp_item_transform_scale(layer_tmp01, l01["suu_up_x01"], l01["suu_up_y01"],l01["suu_dw_x01"],l01["suu_dw_y01"]) pdb.gimp_layer_set_opacity(layer_tmp01, opacity01) if l01["day_red01"] == True: #日曜日と祝日 pdb.gimp_drawable_color_balance(layer_tmp01, 0, FALSE, 100, 0, 0) # 赤は1番目 elif l01["day_blue01"] == True: #土曜日 pdb.gimp_drawable_color_balance(layer_tmp01, 0, FALSE, 0, 0, 100) # 青は3番目 # 文字の関係 txt_tmp01 = l01["syukujitu_bun01"] + l01["kinenbi_bun01"] if len(txt_tmp01) > 0: text_layer01 = pdb.gimp_text_fontname(XCF_OUT01, None, l01["moji_x01"],l01["moji_y01"], txt_tmp01, 1, TRUE, MOJI_ZOKU01[1], 0, MOJI_ZOKU01[0]) pdb.gimp_text_layer_resize(text_layer01, WAKU_SIZ01[0], MOJI_ZOKU01[1]*2) pdb.gimp_text_layer_set_justification(text_layer01, 2) if l01["kinenbi_png01"] <> "": img_tmp02 = os.path.join(DIR01,l01["kinenbi_png01"]) layer_tmp02 = pdb.gimp_file_load_layer(XCF_OUT01, img_tmp02) pdb.gimp_image_insert_layer(XCF_OUT01,layer_tmp02,None,-1) pdb.gimp_item_transform_scale(layer_tmp02, l01["point_up_x01"], l01["point_up_y01"],l01["point_dw_x01"],l01["point_dw_y01"]) # 曜日の表示 def print_week01(CONF01): kd01 = CONF01["SYUU_START01"] # 週の初めの曜日 for i in range(7): i_wek01 = img_wed01[kd01] i_width_wek01 = pdb.gimp_image_width(i_wek01) i_height_wek01 = pdb.gimp_image_height(i_wek01) lay01_act01 = pdb.gimp_layer_new_from_visible(i_wek01,XCF_OUT01, "wd%02d" % kd01) pdb.gimp_image_insert_layer(XCF_OUT01,lay01_act01,None,-1) rate01 = float(float(CONF01["YOUB_POS01"][2])/i_height_wek01) scale_x01, scale_y01 = rate01, rate01 source_x01, source_y01 = i_width_wek01/2, i_height_wek01/2 dest_x01 = CONF01["YOUB_POS01"][0] + CONF01["WAKU_SIZ01"][0]*i + i_width_wek01*rate01/2 dest_y01 = CONF01["YOUB_POS01"][1] + i_height_wek01*rate01/2 lay_wek_f010 = pdb.gimp_item_transform_2d(lay01_act01, source_x01, source_y01, scale_x01, scale_y01, 0, dest_x01, dest_y01) if kd01 >= 6: kd01 = 0 else: kd01 += 1 # 年月の表示 def print_nen_getu01(CONF01): nen_tmp01 = CONF01["NENGETU01"][0] nen_keta4 = nen_tmp01//1000 nen_keta3 = (nen_tmp01 - nen_keta4*1000)//100 nen_keta2 = (nen_tmp01 - nen_keta4*1000 - nen_keta3*100)//10 nen_keta1 = nen_tmp01 - nen_keta4*1000 - nen_keta3*100 - nen_keta2*10 lay_nen01 = lay_from_num01(img_num01[nen_keta4], img_num01[nen_keta3], 99, 11) lay_nen02 = lay_from_num01(img_num01[nen_keta2], img_num01[nen_keta1], 99, 22) tuki_tmp01 = CONF01["NENGETU01"][1] tuki_keta2 = int(tuki_tmp01/10) tuki_keta1 = int(tuki_tmp01 - tuki_keta2*10) lay_tuki01 = lay_from_num01(img_num01[tuki_keta2], img_num01[tuki_keta1], 99, tuki_tmp01) tmp01 = os.path.join(CONF01["DIR01"], CONF01["MOJI_NEN01"]) # 年 moji_nen01 = pdb.gimp_file_load_layer(XCF_OUT01, tmp01) pdb.gimp_image_insert_layer(XCF_OUT01,moji_nen01,None,-1) tmp01 = os.path.join(CONF01["DIR01"], CONF01["MOJI_TUKI01"]) # 月 moji_tuki01 = pdb.gimp_file_load_layer(XCF_OUT01, tmp01) pdb.gimp_image_insert_layer(XCF_OUT01,moji_tuki01,None,-1) lay_nen_f01 = layer_comb01(lay_nen01, lay_nen02, 1) lay_nen_f01 = layer_comb01(lay_nen_f01, moji_nen01, 2) lay_nen_f01 = layer_comb01(lay_nen_f01, lay_tuki01, 1) lay_nen_f01 = layer_comb01(lay_nen_f01, moji_tuki01, 2) pdb.gimp_item_set_name(lay_nen_f01, "nengetu01") l_width_lay01 = pdb.gimp_drawable_width(lay_nen_f01) l_height_lay01 = pdb.gimp_drawable_height(lay_nen_f01) rate01 = float(float(CONF01["NENGETU_HEIGHT01"])/l_height_lay01) source_x01, source_y01 = l_width_lay01/2, l_height_lay01/2 scale_x01, scale_y01 = rate01, rate01 dest_x01 = CONF01["NENGETU_POS01"][0] + l_width_lay01*rate01/2 dest_y01 = CONF01["NENGETU_POS01"][1] + l_height_lay01*rate01/2 lay_nen_f010 = pdb.gimp_item_transform_2d(lay_nen_f01, source_x01, source_y01, scale_x01, scale_y01, 0, dest_x01, dest_y01) # 二つのレイヤーを一つにまとめ、一番目のレイヤに吸収する。フラグが1の場合は単純にくっつける。 # フラグが1でないの場合は、2番目のレイヤーは縦横比率を保持したまま縮小拡大してくっつける。高さのサイズは一番目のレイヤーに合わせる。 def layer_comb01(arg_lay01, arg_lay02, flg01): l_width_lay01 = pdb.gimp_drawable_width(arg_lay01) l_height_lay01 = pdb.gimp_drawable_height(arg_lay01) l_width_lay02 = pdb.gimp_drawable_width(arg_lay02) l_height_lay02 = pdb.gimp_drawable_height(arg_lay02) takasa01 = (l_height_lay01 - l_height_lay02)/2 if flg01 <> 1: #2番目のレイヤーを縦横比率を保存したまま拡大縮小する。 ret_width_lay02 = l_width_lay02*l_height_lay01/l_height_lay02 pdb.gimp_layer_scale(arg_lay02, ret_width_lay02, l_height_lay01, False) takasa01 = 0 pdb.gimp_image_raise_item_to_top(XCF_OUT01, arg_lay01) pdb.gimp_image_raise_item_to_top(XCF_OUT01, arg_lay02) pdb.gimp_layer_set_offsets(arg_lay02, l_width_lay01, takasa01) ret_layer01 = pdb.gimp_image_merge_down(XCF_OUT01, arg_lay02, 0) return(ret_layer01) def main01(): kakunou01() lay_put_num01(CONF01) print_week01(CONF01) print_nen_getu01(CONF01) main01() disp01 = pdb.gimp_display_new(XCF_OUT01) pass