我需要在 jpeg 在Linux上以右侧的右侧格式为20像素。

我检查了 jpegtran, ,但是在裁剪之前,它需要像素的文件大小,我不知道如何使用它构建批处理文件。

如何通过编程图像的右侧无损地裁剪20个像素?

有帮助吗?

解决方案

我的外壳脚本有点生锈,所以请在尝试此脚本之前对图像进行备份。

#!/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 是一个成像命令
  • awk 会从 identify 用作参数(将宽度降低20px) jpegtran 裁剪图像
  • 新图像被保存为 new_[old_name].jpg
  • jpegtran 可能会调整裁剪区域,使其可以无损地执行。检查结果图像是否正确,尺寸不大,尺寸不大。

其他提示

与接受的答案非常相似,以下内容也将与包含空格的文件名一起使用。可以说,它可以说是简单的 identify内置 -format 选项 而不是尴尬地解析输出。

#!/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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top