Python-Fu 目录选择失败 (PF_DIRNAME)
Python-Fu fails on directory selection (PF_DIRNAME)
使用 Python-Fu/gimpfu,我能够从 Script-Fu 控制台注册一个插件并运行它。
但是我无法从创建的 GUI 菜单项中 运行 插件。
无论我从任一目录下拉菜单中选择哪个条目,我都会收到这些错误:
- pythonw.exe 已停止工作(关闭程序)
- GIMP 消息:插件崩溃:"batch_scale.py"
- GIMP 消息:无法 运行 GimpPdbProgress 回调
GIMP 版本:2.8.18
插件代码(省略部分功能):
import os
from gimpfu import *
# Copy to ~/.gimp-<version>/plug-ins
# Launch GIMP
# Should register a function named python-fu-batch-scale
# Run the function from Filters > Script-Fu > Console
def loadImage(sourceFile):
if isJPEG(sourceFile):
return pdb.file_jpeg_load(sourceFile, sourceFile)
if isPNG(sourceFile):
return pdb.file_png_load(sourceFile, sourceFile)
def saveImage(outputFile, image):
drawable = pdb.gimp_image_get_active_drawable(image)
if isJPEG(outputFile):
saveJPEG(outputFile, image, drawable)
if isPNG(outputFile):
savePNG(outputFile, image, drawable)
def scaleImage(image, maxWidth, maxHeight):
width = pdb.gimp_image_width(image)
height = pdb.gimp_image_height(image)
aspectRatio = width * 1.0 / height
if aspectRatio >= 1.0:
# horizontal
newWidth = min(width, maxWidth)
newHeight = newWidth / aspectRatio
pdb.gimp_image_scale(image, newWidth, newHeight)
else:
# vertical
newHeight = min(height, maxHeight)
newWidth = newHeight * aspectRatio
pdb.gimp_image_scale(image, newWidth, newHeight)
def run(sourceFolder, outputFolder, maxWidth, maxHeight):
if not os.path.exists(outputFolder):
os.makedirs(outputFolder)
filenames = [f for f in os.listdir(sourceFolder) if os.path.isfile(os.path.join(sourceFolder, f))]
for filename in filenames:
sourceFile = os.path.join(sourceFolder, filename)
outputFile = os.path.join(outputFolder, filename)
image = loadImage(sourceFile)
scaleImage(image, maxWidth, maxHeight)
saveImage(outputFile, image)
register(
"batch_scale",
"Scales a folder of images (JPEG or PNG)",
"<help>",
"<author>",
"<license>",
"<date>",
"<Toolbox>/Xtns/Languages/Python-Fu/_Scale Images",
"",
[
(PF_DIRNAME, "sourceFolder", "Source directory", ""),
(PF_DIRNAME, "outputFolder", "Output directory", ""),
(PF_INT, "maxWidth", "Maximum width", 1600),
(PF_INT, "maxHeight", "Maximum height", 900)
],
[],
run
)
main()
我在 Linux 上遇到了类似的问题,当我单击目录选择器时,插件就死机了。然而,有一个解决方法:提供一个默认目录(似乎它甚至不需要是有效目录,至少对于 Linux 版本):
(PF_DIRNAME, "outputFolder", "Output directory", "/tmp"),
PS:
- 虽然我赞赏你在 Gimp python 脚本方面的尝试,但你可以通过调用 ImageMagick 的
convert
command. 来做同样的事情
- 您还可以在 Python-fu 控制台中测试您的 Python 脚本
- 在这个 21 世纪,没有人在
<Toolbox>/Xtns/Languages/Python-Fu/
中使用菜单注册脚本,你一定是在看非常古老的文档。
使用 Python-Fu/gimpfu,我能够从 Script-Fu 控制台注册一个插件并运行它。
但是我无法从创建的 GUI 菜单项中 运行 插件。
无论我从任一目录下拉菜单中选择哪个条目,我都会收到这些错误:
- pythonw.exe 已停止工作(关闭程序)
- GIMP 消息:插件崩溃:"batch_scale.py"
- GIMP 消息:无法 运行 GimpPdbProgress 回调
GIMP 版本:2.8.18
插件代码(省略部分功能):
import os
from gimpfu import *
# Copy to ~/.gimp-<version>/plug-ins
# Launch GIMP
# Should register a function named python-fu-batch-scale
# Run the function from Filters > Script-Fu > Console
def loadImage(sourceFile):
if isJPEG(sourceFile):
return pdb.file_jpeg_load(sourceFile, sourceFile)
if isPNG(sourceFile):
return pdb.file_png_load(sourceFile, sourceFile)
def saveImage(outputFile, image):
drawable = pdb.gimp_image_get_active_drawable(image)
if isJPEG(outputFile):
saveJPEG(outputFile, image, drawable)
if isPNG(outputFile):
savePNG(outputFile, image, drawable)
def scaleImage(image, maxWidth, maxHeight):
width = pdb.gimp_image_width(image)
height = pdb.gimp_image_height(image)
aspectRatio = width * 1.0 / height
if aspectRatio >= 1.0:
# horizontal
newWidth = min(width, maxWidth)
newHeight = newWidth / aspectRatio
pdb.gimp_image_scale(image, newWidth, newHeight)
else:
# vertical
newHeight = min(height, maxHeight)
newWidth = newHeight * aspectRatio
pdb.gimp_image_scale(image, newWidth, newHeight)
def run(sourceFolder, outputFolder, maxWidth, maxHeight):
if not os.path.exists(outputFolder):
os.makedirs(outputFolder)
filenames = [f for f in os.listdir(sourceFolder) if os.path.isfile(os.path.join(sourceFolder, f))]
for filename in filenames:
sourceFile = os.path.join(sourceFolder, filename)
outputFile = os.path.join(outputFolder, filename)
image = loadImage(sourceFile)
scaleImage(image, maxWidth, maxHeight)
saveImage(outputFile, image)
register(
"batch_scale",
"Scales a folder of images (JPEG or PNG)",
"<help>",
"<author>",
"<license>",
"<date>",
"<Toolbox>/Xtns/Languages/Python-Fu/_Scale Images",
"",
[
(PF_DIRNAME, "sourceFolder", "Source directory", ""),
(PF_DIRNAME, "outputFolder", "Output directory", ""),
(PF_INT, "maxWidth", "Maximum width", 1600),
(PF_INT, "maxHeight", "Maximum height", 900)
],
[],
run
)
main()
我在 Linux 上遇到了类似的问题,当我单击目录选择器时,插件就死机了。然而,有一个解决方法:提供一个默认目录(似乎它甚至不需要是有效目录,至少对于 Linux 版本):
(PF_DIRNAME, "outputFolder", "Output directory", "/tmp"),
PS:
- 虽然我赞赏你在 Gimp python 脚本方面的尝试,但你可以通过调用 ImageMagick 的
convert
command. 来做同样的事情
- 您还可以在 Python-fu 控制台中测试您的 Python 脚本
- 在这个 21 世纪,没有人在
<Toolbox>/Xtns/Languages/Python-Fu/
中使用菜单注册脚本,你一定是在看非常古老的文档。