无损jpeg批量作物

时间:2013-11-07 22:49:57

标签: jpeg crop batch-processing lossless

我需要在右侧无损地裁剪一堆jpeg 20像素。你知道任何可以做到这一点的软件吗?我检查了jpegtran,但它需要在裁剪之前以像素为单位的文件大小,我不知道如何使用它来构建批处理文件。有什么想法吗?

3 个答案:

答案 0 :(得分:2)

我的shell脚本有点生疏,所以请在尝试此脚本之前备份您的图片。

#!/bin/bash
FILES=/path/to/*.jpg

for f in $FILES
do
    identify $f | awk '{ split($3, f, "x"); f[1] -= 20; cl = sprintf("jpegtran -crop %dx%d+0+0 %s > new_%s", f[1], f[2], $1, $1); system(cl); }'
done

注意事项:

  • 将路径调整为正确的值
  • 你需要* .jpeg?
  • identify是一个ImageMagick命令
  • awk将获取identify的像素尺寸,以用作jpegtran裁剪图像的参数(宽度减少20px)
  • 新图片保存为new_[old_name].jpg
  • jpegtran可能会调整裁剪区域,以便它可以无损地执行。检查生成的图像大小是否正确,但不要稍大。

答案 1 :(得分:0)

BatchCrop 可以做到这一点。它支持Windows和Mac。

www.batchcrop.com

答案 2 :(得分:0)

与接受的答案非常相似,以下内容也可以用于包含空格的文件名。使用identify内置的-format option而不是用awk解析输出,可以说很简单。

#!/bin/bash

X=0; Y=0   # offset from top left corner

for f in /path/to/*.jpg; do
    read -r W H < <(identify -format '%w %h' "$f") # get width and height
    (( W -= 20 ))                                  # substract 20 from width
    out="${f%%.jpg}-crop-20.jpg"                   # add "-crop-20" to filename
    jpegtran -crop ${W}x$H+$X+$Y "$f" > "$out"     # crop
done