仅使用命令行工具裁剪图像


34

我想使用命令行工具在仅 CLI的Ubuntu上裁剪图像,指示四个方向上要裁剪的像素。(与libreoffice中的相同)

例如:

crop image.jpg -top 5px -bottom 7px -right 14px -left 3px

有没有这样的工具(不是GUI)?



@ThomasWeller这是在询问命令行而不是GUI工具,加上您提供的关于GUI的链接问题,所以请再次阅读该问题
Maythux 2015年

2
链接的问题未指定工具类型。第二个答案是关于命令行工具:imagemagick。我知道有人在讨论是否一个重复的问题,以防答案相同。人们可能同意或不同意。
Thomas Weller 2015年

1
@ThomasWeller但是答案并不方便,而且它没有显示他如何以及为什么使用这些选项。我自己无法获得该信息,这只是这里的第一个答案,没有任何解释,这会使答案的质量降低
Maythux 2015年

@downvoters我应该知道你怎么了吗?!
Maythux 2015年

Answers:


38

这是使用convertimage magick包的解决方法。

sudo apt-get install imagemagick

对于图片 image.jpg

$ identify image.jpg 

image.jpg JPEG 720x482 720x482+0+0 8-bit DirectClass 100KB 0.000u 0:00.009

如上所示,输入图像为720x482px。

现在要进行裁剪,您必须确定两个因素:

  1. 裁剪的起点(包括2个方向)
  2. 裁剪后的矩形尺寸(您可以在此处添加其他方向)

现在回到上图image.jpg,我要裁剪:

  • 前5像素
  • 底部7像素
  • 右14px
  • 左3像素

那么你可以用(做widthX height+ left+ top/ wX h+ l+ t格式):

convert image.jpg -crop 703x470+3+5 output.jpg

现在

$ identify output.jpg 

output.jpg JPEG 703x470 703x470+0+0 8-bit DirectClass 102KB 0.000u 0:00.000

2
据说Imagemagick 7使用“ magick”命令代替“ convert”。如果有人遇到command not found: convert问题,请尝试magick
iplus26 '17

1
这是一个很大的帮助,但是我花了一些时间来整理一下“计算”。我需要从中裁剪顶部和底部的一组1280x1024图像,因此最终图像将具有原始图像的“中间” 718像素(去除顶部和底部的黑带)。我需要使用:convert in.png -crop 1280x718+0+152 out.png我明白那行的意思是:convert in.png -crop [final-right-x]x[final-right-y]+[crop-left]+[crop-top] out.png,尽管这似乎与@Maythux的数字不匹配... FWIW!
Dɑvïd

3
它不应该是703x470不是713x470?作为左右裁剪= 3+14 = 17px,从中减去720703,而不是713
Mooncrater

这有帮助!我还建议对FIX分别为703px(而不是713px)进行修正(我同意),并以格式WxH+l+t
上下

12

如果要修剪白色区域,请imagemagick执行以下特殊命令:

convert -trim input.jpg output.jpg

9

要创建“用户友好”的cli,可以使用以下脚本。只需运行以下命令:

<script> <image> <crop_left> <crop_right> <crop_top> <crop_bottom>

它创建的裁剪图像image.jpeg,命名image[cropped].jpeg在同一目录下。

剧本

#!/usr/bin/env python3
import subprocess
import sys

# image, crop- dimensions
img = sys.argv[1]; left = sys.argv[2]; right = sys.argv[3]; top = sys.argv[4]; bottom = sys.argv[5]
# arrange the output file's name and path
img_base = img[:img.rfind(".")]; extension = img[img.rfind("."):]; path = img[:img.rfind("/")]
img_out = img_base+"[cropped]"+extension
# get the current img' size
data = subprocess.check_output(["identify", img]).decode("utf-8").strip().replace(img, "")
size = [int(n) for n in data.replace(img, "").split()[1].split("x")]
# calculate the command to resize
w = str(size[0]-int(left)-int(right)); h = str(size[1]-int(top)-int(bottom)); x = left; y = top
# execute the command
cmd = ["convert", img, "-crop", w+"x"+h+"+"+x+"+"+y, "+repage", img_out]
subprocess.Popen(cmd)

如何使用

  1. 脚本使用 imagemagick

    sudo apt-get install imagemagick
    
  2. 将上述脚本另存为crop_image(无扩展名)~/bin

  3. 如有必要,创建目录。在这种情况下,还要运行source ~/.profile以使目录显示在中$PATH
  4. 使脚本可执行。

现在,只需按其名称运行脚本即可,例如:

crop_image /path/to/image.jpg 20 30 40 50

空格是没有问题的,只要在这种情况下使用引号即可:

crop_image '/path/with spaces in the name/to/image.jpg' 20 30 40 50

@Maythux不确定您的最新编辑是什么意思,您是说上述解决方案在您的系统上不起作用?它仅是cli。
Jacob Vlijm 2015年

很抱歉,我三天前没去,所以我不知道你为什么要投票,而是这里我的+1,因为你应得的。
Maythux 2015年

但是我认为即使对新手来说,这也比使用本地裁剪工具要困难得多,但是对我来说,我喜欢您的方式,非常酷,再次

哇谢谢。该downvote我因为这个:meta.askubuntu.com/questions/14082/...
雅各布Vlijm

我不知道为什么一个好的答案/问题会被否决,除非对声誉的错误使用,这个问题得-3。我不明白为什么
Maythux 2015年

3

您可以在image magick包中使用convert命令。
要安装sudo apt-get install imagemagicksudo yum install ImageMagick
然后用于-crop geometry裁剪图像。欲了解更多信息,请点击这里


按比例且没有不同幅度的
收成

不,-crop选项给出xy是偏移量和gravity。因此您可以用它来裁剪一个正方形
M.Fooladgar

我将其发布为答案,无论如何都感谢您的帮助,但是您应该在答案之前将其写下来4
Maythux 2015年

@Arronical谢谢,我已经得到它并发布为答案。请检查一下
Maythux 2015年

3

使用mogrify -crop <W>x<H>+<X>+<Y> <files>

注意:文件将被覆盖,恕不另行通知。


1

crop命令需要4件事。要了解它,请选择要裁剪的图像。现在,想象一下在图像上,您正在绘制一个要保留的大小的矩形。此矩形外部的区域将被消除,裁剪。矩形一定不能倾斜,即顶边必须是水平的。

现在,记下这四件事:

  1. 矩形的宽度(W),以像素为单位
  2. 矩形的高度(H)
  3. 矩形左垂直边距图像左边缘/末端(L)的距离
  4. 矩形顶边距图像顶边距/末端的距离(T)。

因此,您现在有了W,H,L和T值。到目前为止,一切都很好。要知道像素,您可以在Ubuntu中安装krule工具。很有用。

现在,打开终端并转到存储图像的文件夹。使用以下命令并正确输入W,H,L和T的值:

convert input.jpg -crop WxH+L+T output.jpg
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.