我想使用裁剪图像仅限命令行工具指示四个方向要裁剪的像素(与我们在 LibreOffice 中裁剪的方式相同)
例如:
crop image.jpg -top 5px -bottom 7px -right 14px -left 3px
是否有这样的工具(非 GUI)?
答案1
convert
这是使用图像魔法包的解决方法。
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。
现在要进行裁剪,你必须确定两个因素:
- 裁剪的起点(包含 2 个方向)
- 裁剪后的矩形尺寸(这里可以包括其他方向)
现在回到上面的图片image.jpg
,我想要裁剪:
- 顶部 5px
- 底部 7px
- 右 14px
- 左 3px
width
那么您可以使用( x height
++ / x ++格式)left
来完成:top
w
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
可以使用特殊命令:
convert -trim input.jpg output.jpg
答案3
要创建“用户友好”的 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)
如何使用
该脚本使用
imagemagick
sudo apt-get install imagemagick
将上述脚本另存为
crop_image
(无扩展名)~/bin
。- 如果需要,请创建目录。在这种情况下,还要运行
source ~/.profile
以使目录显示在 中$PATH
。 - 使脚本可执行。
现在只需按其名称运行脚本,如上所述,例如:
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
答案4
使用mogrify -crop <W>x<H>+<X>+<Y> <files>
。
小心:文件覆盖恕不另行通知。-path
如果需要,请添加指定输出目录的选项以防止这种情况发生。
例如:mogrify -crop 256x256+10+5 images/*.jpg
将文件夹中的每个图像images
从顶部开始裁剪 10 个像素,从侧面开始裁剪 5 个像素,将其裁剪为 256x256 图像。它将覆盖旧图像。
Argument list too long
如果由于尝试一次转换多个图像而出现错误,只需将图像路径括在单引号中以防止 bash 扩展它: mogrify -crop 256x256+10+5 'images/*.jpg'
(mogrify 将自行进行扩展)