GIMP python-fu,如何获取最后保存图像的目录



我正在尝试创建一些GIMP插件,这里我有gtk FileDialog:

chooser = gtk.FileChooserDialog(title="Save as...",
action=gtk.FILE_CHOOSER_ACTION_SAVE,
buttons=(gtk.STOCK_SAVE,
gtk.RESPONSE_OK,
gtk.STOCK_CANCEL,
gtk.RESPONSE_CANCEL))
chooser.set_do_overwrite_confirmation(True)

我想将FileChoserDialog的当前文件夹设置为最后使用的目录,如

chooser.set_current_folder(">>>>>HERE I NEED THE DIRECTORY OF THE LAST SAVED IMAGE<<<<<<<<")

我怎么能那样做呢?

我唯一想到的是将文件名保存为图像。文件名,然后清除。

chooser.set_current_folder(choose_set_dir())
response = chooser.run()
filename = chooser.get_filename()
chooser.destroy()
if response == gtk.RESPONSE_OK
<...>
pdb.file_jpeg_save(image, drawable, filename, filename, 0.9, 0, 0, 0, "", 2, 1, 0, 0)
clear_filenames()
image.filename = filename
image.clean_all()

def choose_set_dir():
for img in gimp.image_list():
if img.filename:
return path.dirname(img.filename)

return path.expanduser("~/Desktop")

def clear_filenames():
for img in gimp.image_list():
if img.filename:
img.filename = ""

但这是一种hack,我想把事情做好。

也许不是个好主意…filecselect文档说:

请注意,旧版本的文件选择器文档建议在各种情况下使用gtk_file_chooser_set_current_folder(),目的是让应用程序建议一个合理的默认文件夹。这不再被认为是一个好的策略,因为现在文件选择器能够自己提出好的建议。一般来说,只有当使用gtk_file_chooser_set_filename()合适时,你才应该让文件选择器显示一个特定的文件夹,也就是说,当你正在执行另存为命令并且你已经在某处保存了一个文件时。

此外,文件选择器对话框中有"最近使用过的"书签,以便用户可以快速找到他们最近使用过的任何目录。

如果这还不够:

  • 您可以迭代图像列表,并获得所有加载的图像的文件名,检查时间戳,并尝试推断最后保存的图像,但仍然需要这些图像当前在Gimp中打开。
  • 在Linux上,您可以检查文件~/.local/share/recently-used.xbel,这是(大多数,包括Gimp,但不是全部)应用程序共享最近使用的文件信息的地方。最后一个文件是最近的文件。

更多提示:

  • gimp.user_directory(n)(n in[0..8])返回一些目录的路径:Desktop, Documents, Pictures....
  • 将命名argrun_mode=RUN_INTERACTIVE添加到file_jpeg_save使其引出JPEG选项对话框,因此您不需要硬编码选项,并且可以在以下调用中使用run_mode=RUN_WITH_LAST_VALS来重用相同的设置。

我发现有一个叫做gimpshelf的模块

使用这个模块,我可以保存插件运行之间的数据

from gimpfu import *
from gimpshelf import shelf
import gtk
from os import path
def choose_set_dir():
if shelf.has_key('photo_sign_last_save_dir'):
return shelf['photo_sign_last_save_dir']
else:
return gimp.user_directory(USER_DIRECTORY_DESKTOP)
chooser = gtk.FileChooserDialog(title="Save As...",
action=gtk.FILE_CHOOSER_ACTION_SAVE,
buttons=(gtk.STOCK_SAVE,
gtk.RESPONSE_OK,
gtk.STOCK_CANCEL,
gtk.RESPONSE_CANCEL))
chooser.set_do_overwrite_confirmation(True)
chooser.set_current_folder(choose_set_dir())
response = chooser.run()
filename = chooser.get_filename()
chooser.destroy()
if response == gtk.RESPONSE_OK:
<...>
pdb.file_jpeg_save(image, drawable, filename, filename, 0.9, 0, 0, 0, "", 2, 1, 0, 0)
shelf['photo_sign_last_save_dir'] = path.dirname(filename)

最新更新