GIMP使用命令行

我想在Ubuntu的命令行上使用GIMP对一些图像进行操作。 我想要进行的操作有: 1. 打开一个图像 2. 将图像转换为灰度 3. 将PNG图像转换为JPEG
请问我如何在命令行中实现这些操作?
3个回答

我不知道如何使用Gimp来完成这个任务,但实际上我认为来自imagemagick软件包的工具对于这种命令行任务来说是更好的选择。这个软件包被广泛用作Web服务器应用程序(如MediaWiki和WordPress)的转换工具,同时也是一些图形应用程序(如PhotoShop)执行某些操作的后端。首先,您需要安装该软件包:
sudo apt install imagemagick

然后使用以下命令来完成任务(reference):
convert input-file.png -set colorspace Gray -separate -average output-file.jpg

如果你需要将当前目录中的所有PNG文件转换,你可以使用如下循环:
for f in *.png; do convert "$f" -set colorspace Gray -separate -average "${f%.*}.jpg"; done

7Imagemagick确实要简单得多,不过如果楼主坚持使用Gimp,它也有批处理模式:https://www.gimp.org/tutorials/Basic_Batch/ - vanadium
1+1 对于即时通讯,但它不被Gimp使用(当然也不被PS使用...) - xenoid
5嗨,@xenoid,谢谢!我不确定Gimp,但是Photoshop配备了IM的convert工具 - pa4080

打开一张图片真的很简单(image.png是你想要打开的图片)
gimp image.png

将RGB图像转换为灰度图像: 创建一个GIMP Script-Fu文件(这里命名为dmmConvertPNGtoGrayscale.scm,并保存在$HOME/.gimp-2.8/scripts目录中):
; dmmPNGtoGrayscale - GIMP Script-Fu将PNG图像转换为灰度图像 ; 此Script-Fu必须放置在GIMP的脚本目录中 ; (例如,$HOME/.gimp-1.2/scripts)。 ; 对于命令行调用,请使用shell脚本rgbtogs.sh ; 对于交互式调用,请运行GIMP并转到 ; Xtns -> Script-Fu -> dmm ; (define (dmmPNGtoGrayscale infile outfile) (let* ((image (car (file-png-load 1 infile infile))) (drawable (car (gimp-image-active-drawable image))) )
(gimp-convert-grayscale image)
(file-png-save 1 image drawable outfile outfile 1 0 0 0 0 0 0 ) ; 1 Adam7交错? ; 0 压缩系数(0-9) ; 0 写入bKGD块? ; 0 写入gAMMA块? ; 0 写入oFFs块? ; 0 写入tIME块? ?? 在DB Browser中向后反向 ; 0 写入pHYS块? ?? 在DB Browser中向后反向 ) )
(script-fu-register ; 我总是忘记这些... "dmmPNGtoGrayscale" ; 要注册的脚本名称 "/Xtns/Script-Fu/dmm/dmmPNGtoGrayscale" ; 放置的位置 "dmm PNG(RGB或索引)转换为灰度图像" ; 脚本描述 "David M. MacMillan" ; 作者 "Copyright 2004 by David M. MacMillan; GNU GPL" ; 版权 "2004-02-08" ; 日期 "" ; 图像类型 SF-FILENAME "Infile" "infile.png" ; 默认参数 SF-FILENAME "Outfile" "outfile.png" )
并使用以下脚本启动它(例如,我将其命名为rgbtogs.sh):
# rgbtogs.sh # 使用Script-Fu dmmPNGtoGrayscale.scm调用GIMP # 没有错误检查。
if [ -e $1 ] then echo "Usage: rgbtogs.sh degrees filebasename" echo "Error: Parameter (filename base) required" exit 1 fi
gimp -c -i -d -b "(dmmPNGtoGrayscale \"$1.png\" \"$1-gray.png\")" "(gimp-quit 0)"
赋予脚本执行权限并启动它:
chmod +x rgbtogs.sh ./rgbtogs.sh image
  • 将PNG图像转换为JPEG(或JPG):
  • 创建一个GIMP Script-Fu文件(这里命名为dmmConvertPNGtoJPG.scm,并保存在$HOME/.gimp-2.8/scripts目录中):

    ; dmmConvertPNGtoJPG.scm - GIMP Script-Fu用于将PNG转换为JPG
    ;    此Script-Fu必须放置在GIMP的脚本目录中
    ;    (例如,$HOME/.gimp-1.2/scripts)。
    ;    对于命令行调用,请使用shell脚本pngtojpg.sh
    ;    对于交互式调用,请运行GIMP并转到
    ;    Xtns -> Script-Fu -> dmm
    ;
    (define (dmmConvertPNGtoJPG infile outfile)
       (let* ((image (car (file-png-load 1 infile infile)))
              (drawable (car (gimp-image-active-drawable image)))
             )
    
             (file-jpeg-save 1 image drawable outfile outfile 
                  0.75 0 1 1 "GIMP" 0 1 0 0 )
                ; 0.75质量(浮点数 0 <= x <= 1)
                ;      0平滑因子(0 <= x <= 1)
                ;        1熵编码参数优化(0/1)
                ;          1启用渐进式JPEG图像加载(0/1)
                ;            "xxxx"  图像注释
                ;                   0子采样选项编号
                ;                     1强制创建基线JPEG
                ;                       0重启标记在行中的频率,0 = 没有重启标记
                ;                         0要使用的DCT算法
       )
    )
    
    (script-fu-register                                 ; 我总是忘记这些...
       "dmmConvertPNGtoJPG"                             ; 要注册的脚本名称
       "<工具箱>/Xtns/Script-Fu/dmm/dmmConvertPNGtoJPG" ; 它放在哪里
       "dmm将PNG转换为JPG"                         ; 脚本描述
       "David M. MacMillan"                             ; 作者
       "版权所有2004年David M. MacMillan;GNU GPL"  ; 版权
       "2004-01-27"                                     ; 日期
       ""                                               ; 图像类型
       SF-FILENAME "输入文件" "infile.png"                ; 默认参数
       SF-FILENAME "输出文件" "outfile.png"
    )
    

    并使用以下脚本启动它(例如,我将其命名为pngtojpg.sh):

    # pngtojpg.sh
    # 使用Script-Fu dmmConvertPNGtoJPG.scm调用GIMP
    # 没有错误检查。
    
    if [ -e $1 ] 
    then
       echo "用法:pngtojpg.sh 文件名"
       echo "错误:需要参数1(文件名基础)"
       exit 1
    fi
    
    gimp -c -i -d -b "(dmmConvertPNGtoJPG \"$1.png\" \"$1.jpg\")" "(gimp-quit 0)"
    

    将执行权限赋予该脚本并启动它:

    chmod +x pngtojpg.sh
    ./pngtojpg.sh image
    

    来源:http://beefchunk.com/documentation/lang/gimp/GIMP-Scripts-Fu.html

    注意:在GIMP Script-Fu文件中,您可以删除所有以;字符开头的行(或者该字符右侧的所有内容),这些只是注释

    注意:这些.scm的Script-Fu最初是为GIMP 1.2制作的,但我已经在GIMP 2.8上进行了测试,没有任何问题


    当我运行这段代码时,出现了以下错误: 用法:dmmPNGtoGrayscale.sh degrees filebasename 错误:需要参数(文件名基础) - Sara
    可能我犯了一个错误,开始脚本应该是 ./rgbtogs.sh image,其中 image 是你的图像文件名不包括扩展名。 - damadam
    它能运行,但我仍然遇到了一个错误:批处理命令发生了执行错误: 错误:eval: 未绑定的变量:dmmPNGtoGrayscale - Sara
    scm脚本文件必须放置在隐藏的GIMP文件夹中,即位于$HOME/.gimp2.8/scripts目录下(这些脚本是用GIMP 1.2制作的,但我已经在2.8版本上进行了测试,可以正常运行)。 - damadam
    非常感谢您的帮助。 - Sara
    “DB Browser中的“??反向”评论是怎么回事?” - Michael Schumacher
    有没有一种方法可以在保持“无状态”的情况下调用.scm文件中定义的函数,即不必将文件放置在GIMP的配置目录中?仅在命令执行期间加载文件的内容? - Manu
    @Manu,你需要更改Gimp脚本目录才能实现这一点,但只有在使用正确的命令(我的回答中的bash文件)时才会使用这些脚本;很遗憾我无法帮助你完成这个任务。 - damadam

    你可以运行gimp -h来获取Gimp的不同可用选项。
    1.打开一张图片 gimp -n image_name.xxx 2.将一张图片转换为灰度图 我不知道是否可以使用Gimp来完成这个操作,请点击以下链接查看:https://www.gimp.org/tutorials/Basic_Batch/

    https://superuser.com/questions/1334386/how-to-load-an-image-in-gimp-from-the-terminal-and-exiting-afterwards

    3. 将PNG图像转换为JPEG
    我建议使用命令行中的convert命令,它是ImageMagick的一部分。 convert image1.xxx image2.yyy

    3最好的做法是在这些链接中添加一些关于所做内容的说明。 - damadam