def prepare_tts(img, _, output_folder): # pylint: disable=R0914 """ Prepare a TTS sheet image. """ gimp.progress_init('Prepare a TTS sheet image...') pdb.gimp_undo_push_group_start(img) try: file_name, _ = _get_filename_backside(img, 'jpg') except Exception: # pylint: disable=W0703 pdb.gimp_undo_push_group_end(img) return parts = file_name.split('_') num = int(parts[-3]) rows = int(parts[-4]) columns = int(parts[-5]) new_width = columns * 750 new_height = rows * 1050 pdb.gimp_image_scale(img, new_width, new_height) json_path = re.sub(r'\.jpg$', '.json', pdb.gimp_image_get_filename(img)) try: with open(json_path, 'r') as fobj: cards = json.load(fobj) except Exception: # pylint: disable=W0703 pdb.gimp_undo_push_group_end(img) return cards = [c['path'] for c in cards] if len(cards) != num: pdb.gimp_undo_push_group_end(img) return card_rows = [ cards[i * columns:(i + 1) * columns] for i in range((len(cards) + columns - 1) // columns) ] if len(card_rows) != rows: pdb.gimp_undo_push_group_end(img) return for i, card_row in enumerate(card_rows): for j, card_path in enumerate(card_row): if not os.path.exists(card_path): pdb.gimp_undo_push_group_end(img) return card_layer = pdb.gimp_file_load_layer(img, card_path) pdb.gimp_image_insert_layer(img, card_layer, None, -1) rotation = _get_rotation(card_layer) if rotation: _rotate(card_layer, True) pdb.gimp_layer_set_offsets(card_layer, j * 750, i * 1050) pdb.gimp_image_merge_down(img, card_layer, 1) pdb.file_jpeg_save(img, img.layers[0], os.path.join(output_folder, file_name), file_name, 1, 0, 1, 0, '', 2, 1, 0, 0) pdb.gimp_undo_push_group_end(img)
def convert_image(target_dir, output_dir, image_name): ''' Обрабатывает картинку. @param target_dir: string @param output_dir: string @param image_name: string ''' output_path = os.path.join(output_dir, image_name) if os.path.exists(output_path): print '%s already exists, skipping'%image_name return image = pdb.file_jpeg_load(os.path.join(target_dir, image_name), image_name) layer = image.layers[0] # Выравниваем уровни: # pdb.gimp_levels_stretch(layer) # Добавляем нерезкую маску: # pdb.plug_in_unsharp_mask(image, layer, 5, 0.5, 0) # Изменяем размер картинки: width, height = get_image_new_dimensions(image) pdb.gimp_image_scale(image, width, height) # Автоматически увеличиваем контраст: pdb.plug_in_c_astretch(image, layer) # Повышаем резкость: pdb.plug_in_sharpen(image, layer, 50) pdb.gimp_file_save(image, layer, output_path, image_name) pdb.gimp_image_delete(image)
def load_caches(args): inColorFondR, inColorFondG, inColorFondB, outDir = args.split(" ") inDir, inNameLayerFleche = GRAPH_PATH + "layers/", "layer_fleche-1.png" inColorFondR, inColorFondG, inColorFondB = int(inColorFondR), int( inColorFondG), int(inColorFondB) nb, listimg = pdb.file_glob(inDir + "*.png", 1) baseimage = pdb.gimp_image_new(10, 10, RGB) fondcolor = (inColorFondR, inColorFondG, inColorFondB) for filename in listimg: layer = pdb.gimp_file_load_layer(baseimage, filename) pdb.gimp_image_insert_layer(baseimage, layer, None, 0) pdb.gimp_image_resize_to_layers(baseimage) pdb.gimp_message("Layers chargés") pdb.gimp_selection_all(baseimage) layerfond = pdb.gimp_image_get_layers(baseimage)[1][0] layerfond = gimp.Item.from_id(layerfond) fond = pdb.gimp_layer_copy(layerfond, 1) _, _, _, xmax, ymax = pdb.gimp_selection_bounds(baseimage) pdb.gimp_item_set_name(fond, "layer_fond.png") pdb.gimp_image_insert_layer(baseimage, fond, None, 0) pdb.gimp_edit_clear(fond) pdb.gimp_image_select_round_rectangle(baseimage, CHANNEL_OP_REPLACE, 0, 0, xmax, ymax, 35, 35) pdb.gimp_selection_shrink(baseimage, 3) pdb.gimp_selection_feather(baseimage, 20) pdb.gimp_context_set_foreground(fondcolor) pdb.gimp_edit_fill(fond, FILL_FOREGROUND) pdb.gimp_image_lower_item_to_bottom(baseimage, fond) pdb.plug_in_hsv_noise(baseimage, fond, 5, 38, 63, 74) pdb.gimp_selection_none(baseimage) pdb.gimp_message("Fond créé") caches(baseimage, inNameLayerFleche, "layer_fond.png") pdb.gimp_message("Cache créé") layercache = pdb.gimp_image_get_layer_by_name(baseimage, "cache.png") layerfond = pdb.gimp_image_get_layer_by_name(baseimage, "layer_fond.png") layerfleche = pdb.gimp_image_get_layer_by_name(baseimage, inNameLayerFleche) pdb.gimp_item_set_visible(layerfond, True) pdb.gimp_image_merge_down(baseimage, layercache, CLIP_TO_IMAGE) pdb.gimp_item_set_visible(layerfleche, True) pdb.gimp_image_merge_down(baseimage, layerfleche, CLIP_TO_IMAGE) pdb.gimp_image_scale(baseimage, 900, 550) # drawable = pdb.gimp_image_get_active_drawable(baseimage) pdb.script_fu_multiple_layer_actions(baseimage, None, 0, 0, (0, 0, 0), 4, 0, 0, 0, 0, 0) pdb.gimp_message("Taille de l'image ajustée") pdb.script_fu_export_layers(baseimage, None, outDir, "~l") pdb.gimp_message("Layers enregistrés")
def createTechIcons(timg, tdrawable,file,folder, outFolder,scaleTo): for fileName in os.listdir(folder): # backGroundImage=pdb.gimp_file_load(file, file) # backGroundLayer=backGroundImage.layers[0] if fileName[-4:]!=".dds": continue outFile=outFolder+"/"+"tech_"+fileName image=pdb.gimp_file_load(folder+"/"+fileName, folder+"/"+fileName) pdb.gimp_image_scale(image,scaleTo,scaleTo) pdb.gimp_image_resize(image,52,52,-1,-1) for layer in image.layers: pdb.gimp_layer_resize_to_image_size(layer) # layer_group = pdb.gimp_layer_group_new(image) layer_group=pdb.gimp_item_get_parent(image.layers[0]) layer=pdb.gimp_file_load_layer(image, file) pdb.gimp_image_insert_layer(image,layer,layer_group,1)#(image, layer, parent, position) for layer in image.layers: pdb.gimp_item_set_visible(layer,True) layer = pdb.gimp_image_merge_visible_layers(image, 0) pdb.gimp_image_set_active_layer(image, layer) drawable = pdb.gimp_image_get_active_layer(image) # with open("E:/out.txt",'w') as outTxt: # outTxt.write(outFile) pdb.file_dds_save(image, drawable, outFile,outFile,0,0,0,0,0,0,0)
from gimpfu import pdb filename = "hall_of_fame_large.xcf" image = pdb.gimp_file_load(filename, filename) pdb.gimp_image_scale(image, 1280, 800) outfilename = "hall_of_fame.png" layer = pdb.gimp_image_merge_visible_layers(image, 1) pdb.gimp_file_save(image, layer, outfilename, outfilename)
from gimpfu import pdb for i in range(5): filename = "%s.xcf" % i image = pdb.gimp_file_load(filename, filename) pdb.gimp_image_rotate(image, 0) pdb.gimp_image_scale(image, 104, 68) outfilename = "../../dog/%s.png" % i layer = pdb.gimp_image_merge_visible_layers(image, 1) pdb.gimp_file_save(image, layer, outfilename, outfilename)
def stickerify_bordure(image, current_layer, black_grow=3, white_grow=12, shadow=True, canvas_increase=0, resize=False): def duplicate_layer(): copy = current_layer.copy() image.add_layer(copy) # copy is added above so we want to go down a bit image.active_layer = current_layer return copy def fill_black(): pdb.gimp_edit_bucket_fill(current_layer, 1, 0, 100, 255, 0, 0, 0) def fill_white(): pdb.gimp_edit_bucket_fill(current_layer, 0, 0, 100, 255, 0, 0, 0) def set_colors(): pdb.gimp_context_set_foreground((255, 255, 255)) pdb.gimp_context_set_background((0, 0, 0)) pdb.gimp_context_push() pdb.gimp_image_undo_group_start(image) # clean selection to avoid bugs pdb.gimp_selection_none(image) set_colors() # resize early to avoid compressing the bordure if resize: width, height = image.width, image.height if width == height: new_width, new_height = 512, 512 elif width > height: new_width, new_height = 512, int(height * (512.0 / width)) elif width < height: new_width, new_height = int(width * (512.0 / height)), 512 pdb.gimp_image_scale(image, new_width, new_height) if canvas_increase: width, height = image.width, image.height width_increase = int(width * (canvas_increase / 100)) height_increase = int(height * (canvas_increase / 100)) pdb.gimp_image_resize(image, width + width_increase, height + height_increase, int(width_increase / 2), int(height_increase / 2)) pdb.gimp_layer_resize_to_image_size(current_layer) duplicate_layer() # alpha to selection pdb.gimp_image_select_item(image, 0, current_layer) pdb.gimp_selection_grow(image, black_grow) fill_black() second_layer = duplicate_layer() pdb.gimp_selection_grow(image, white_grow) fill_white() if shadow: duplicate_layer() fill_black() current_layer.translate(8, 8) pdb.gimp_selection_all(image) pdb.plug_in_gauss(image, current_layer, 20, 20, 0) pdb.gimp_layer_set_opacity(current_layer, 70) pdb.gimp_image_merge_down(image, second_layer, 0) if shadow: pdb.gimp_image_merge_down(image, image.active_layer, 0) pdb.gimp_layer_set_name(image.active_layer, "Sticker bordure") pdb.gimp_selection_none(image) pdb.gimp_image_undo_group_end(image) pdb.gimp_context_pop() pdb.gimp_displays_flush()
def scale_image(image, width, height): pdb.gimp_progress_init("Scaling Image...", None) pdb.gimp_context_set_interpolation(INTERPOLATION_CUBIC) pdb.gimp_image_scale(image, width, height)
from gimpfu import pdb filename = "tiles.xcf" image = pdb.gimp_file_load(filename, filename) pdb.gimp_image_scale(image, 32 * 7, 32 * 3) outfilename = "../tiles.png" layer = pdb.gimp_image_merge_visible_layers(image, 1) pdb.gimp_file_save(image, layer, outfilename, outfilename)
def layerToDDS(timg, tdrawable, file, argumentFile, outFolder, byName, scaleBool, scaleTo): #, argumentFile,hmm,blub): # num_layers, layer_ids = pdb.gimp_image_get_layers(image) # with open("E:/out.txt",'w') as outTxt: # outTxt.write(str(os.getcwd())) outFolder = os.path.dirname(file) + "/" + outFolder if not os.path.exists(outFolder): os.makedirs(outFolder) if argumentFile.lower() == "all": image = pdb.gimp_file_load(file, file) fileContent = [] for layer in image.layers: layername = pdb.gimp_item_get_name(layer) fileContent.append(layername + " " + layername) byName = True else: with open(argumentFile, 'r') as argfile: fileContent = [line for line in argfile] for l in fileContent: image = pdb.gimp_file_load(file, file) if scaleBool: if scaleTo: pdb.gimp_image_resize(image, 52, 52, -26, -26) else: pdb.gimp_image_scale(image, 52, 52) line = shlex.split(l) outFile = outFolder + "/" + line[0] if outFile[-4:] != ".dds": outFile += ".dds" for layer in image.layers: # layer = pdb.gimp_image_get_layer_by_name(image, id) pdb.gimp_item_set_visible(layer, False) layers = [] for i, word in enumerate(line[1:]): if byName: if word[:4] == "MOVE": word2 = word[5:] layer = pdb.gimp_image_get_layer_by_name(image, word2) # pdb.gimp_item_set_visible(layer,True) pdb.gimp_layer_scale(layer, 40, 40, False) pdb.gimp_image_set_active_layer(image, layer) drawable = pdb.gimp_image_get_active_layer(image) if word[4] == "L": pdb.script_fu_move_layer_to(image, drawable, -2.5, 5) elif word[4] == "R": pdb.script_fu_move_layer_to(image, drawable, 17.5, 5) line[1 + i] = line[1 + i][5:] # pdb.gimp_item_set_visible(layer,False) for word in line[1:]: #outTxt.write(word+"\n") #layers.append(pdb.gimp_layer_copy(image.layers[int(word)],False)) #pdb.gimp_image_insert_layer(image, layer,image.layers[int(word)], 0) try: if byName: pdb.gimp_item_set_visible( pdb.gimp_image_get_layer_by_name(image, word), True) else: pdb.gimp_item_set_visible(image.layers[int(word)], True) except: pdb.gimp_message("Error parsing line " + " ".join(line) + ". Probably a missing/invalid item") raise if scaleBool and scaleTo: for word in line[2:]: if byName: layer = pdb.gimp_image_get_layer_by_name(image, word) else: layer = image.layers[int(word)] pdb.gimp_layer_scale(layer, scaleTo, scaleTo, False) pdb.gimp_layer_resize(layer, 52, 52, -1, -1) # for layer in layers: # outTxt.write("{!s}".format(layer)) # pdb.gimp_item_set_visible(layer, True) #pdb.gimp_item_set_visible(image.layers[3], True) #pdb.gimp_item_set_visible(image.layers[5], True) layer = pdb.gimp_image_merge_visible_layers(image, 0) pdb.gimp_image_set_active_layer(image, layer) drawable = pdb.gimp_image_get_active_layer(image) for layerIt in image.layers: if layerIt != layer or not scaleTo: pdb.gimp_layer_resize_to_image_size(layerIt) try: pdb.file_dds_save(image, drawable, outFile, outFile, 0, 0, 0, 0, 0, 0, 0) except: pdb.file_dds_save(image, drawable, outFile, outFile, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)