gpt4 book ai didi

windows - 使用 Gimp 在命令行的 x 和 y 上按百分比调整图像大小

转载 作者:可可西里 更新时间:2023-11-01 10:03:31 25 4
gpt4 key购买 nike

据我所知,这应该是可能的。我知道 ImageMagick 的 convert 使这项任务变得微不足道,但我不能使用 ImageMagick,因此我倾向于 Gimp(在 Windows 上)。

我试过这个 Guile 脚本:

(define (resize-image filename new-filename scale)
(let* ((image (car (gimp-file-load RUN-NONINTERACTIVE filename filename)))
(drawable (car (gimp-image-get-active-layer image)))
(width (gimp-image-width image))
(height (gimp-image-height image)))
(gimp-image-scale-full image (* width scale) (* height scale) INTERPOLATION-CUBIC)
(gimp-file-save RUN-NONINTERACTIVE image drawable new-filename new-filename)
(gimp-image-delete image)))

我运行的:

gimp-2.8 -i -b "(resize-image \"image.jpg\" \"image-small.jpg\" 0.5)" -b "(gimp-quit 0)"

但是我得到这个错误:

(gimp-2.8:22244): LibGimpBase-WARNING **: gimp-2.8: gimp_wire_read(): error

(gimp-2.8:22244): LibGimpBase-WARNING **: gimp-2.8: gimp_wire_read(): error
batch command experienced an execution error:
Error: ( : 1) *: argument 1 must be: number

我的解决方案受到这篇文章的启发:

http://warunapw.blogspot.it/2010/01/batch-resize-images-in-gimp.html

最佳答案

缩小图像的最短代码:

image=pdb.gimp_file_load('/tmp/bigger.png','/tmp/bigger.png')
image.scale(int(image.width*.5),int(image.height*.5))
pdb.gimp_file_save(image, image.active_layer, '/tmp/smaller.png','/tmp/smaller.png')

因此,您仍然可以将所有内容都放在一个衬里中。在 Linux 中,这给出了(振作起来):

gimp -idf --batch-interpreter python-fu-eval -b 'image=pdb.gimp_file_load("/tmp/bigger.png","/tmp/bigger.png");image.scale(int(image.width*.5),int(image.height*.5));pdb.gimp_file_save(image, image.active_layer, "/tmp/smaller.png","/tmp/smaller.png")' -b 'pdb.gimp_quit(1)'

IIRC,由于 Windows shell 使用引号的方式,您必须使用双引号来分隔 shell 参数,因此如果您在 Python 字符串周围使用单引号(未经测试),事情会更容易:

gimp -idf --batch-interpreter python-fu-eval -b "image=pdb.gimp_file_load('/tmp/bigger.png','/tmp/bigger.png');image.scale(int(image.width*.5),int(image.height*.5));pdb.gimp_file_save(image, image.active_layer, '/tmp/smaller.png','/tmp/smaller.png')" -b "pdb.gimp_quit(1)"

但是,在启动 Gimp 时(尤其是在 WIndows 上)会有很大的开销,所以如果您需要处理多个文件,最好编写循环遍历目录中文件的代码。这变得有点大,可能希望将代码保留在模块中。来 self 以前作为 Windows 用户的文件:

假设你有一个像这样的 batch.py​​ 文件(你显然必须改进 process() 函数,特别是向它传递参数:

#!/usr/bin/python
# -*- coding: iso-8859-15 -*-
import os,glob,sys,time
from gimpfu import *

def process(infile):
print "Processing file %s " % infile
image=pdb.gimp_file_load('/tmp/bigger.png','/tmp/bigger.png');
image.scale(int(image.width*.5),int(image.height*.5));
pdb.gimp_file_save(image, image.active_layer, '/tmp/smaller.png','/tmp/smaller.png')
pdb.gimp_image_delete(image)

def run(directory):
start=time.time()
print "Running on directory \"%s\"" % directory
for infile in glob.glob(os.path.join(directory, '*.jpg')):
process(infile)
end=time.time()
print "Finished, total processing time: %.2f seconds" % (end-start)

if __name__ == "__main__":
print "Running as __main__ with args: %s" % sys.argv

您可以将其称为(在 Windows 中):

gimp -idf --batch-interpreter python-fu-eval -b "import sys;sys.path=['.']+sys.path;import batch;batch.run('./images')" -b "pdb.gimp_quit(1)"

关于windows - 使用 Gimp 在命令行的 x 和 y 上按百分比调整图像大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42888125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com