jpegtran优化而不改变文件名

Dav*_*vid 20 linux image-manipulation image image-processing

我需要优化一些图像,但不要更改它们的名称.

jpegtran -copy none -optimize image.jpg > image.jpg 
Run Code Online (Sandbox Code Playgroud)

但是,这似乎创建了一个0的文件大小.当我使用不同的文件名时,大小仍然完全相同.

so1*_*311 27

怎么样:

jpegtran -copy none -optimize -outfile image.jpg image.jpg
Run Code Online (Sandbox Code Playgroud)

我无论如何都不是shell专家,但我认为使用原始命令,一旦执行,就会设置重定向,覆盖你的image.jpg.然后,当jpegtran尝试读取它时,它会找到一个空文件.

  • 哦天啊刚刚意识到我输错了命令,**约5次**-_-.这很有用,对不起.我编辑了答案,能够提出你的答案=) (4认同)
  • 对于其他任何看过这个的人来说,似乎这适用于jpegtran的版本8d但不是6b. (3认同)

imo*_*mos 10

我用这个脚本.工作完美无瑕.我希望这有帮助.

https://gist.github.com/iimos/7424025

#! /bin/sh

EXTENSIONS="jpe?g"

if [ -z "$1" ]; then
    DIR="`pwd`"
else
    DIR="$1"
fi

# Optimize JPEG images
find "$DIR" -regextype posix-egrep -regex ".*\.($EXTENSIONS)\$" -type f | xargs -I{} jpegtran -optimize -progressive -outfile "{}.optimized" "{}"

# Rename xxx.jpg.optimized -> xxx.jpg
find "$DIR" -name '*.optimized' -print0 | while read -d $'\0' file; do 
    chown $(stat -c "%U:%G" "${file%.optimized}") "$file"
    chmod $(stat -c "%a" "${file%.optimized}") "$file"
    mv -f "$file" "${file%.optimized}"; 
done
Run Code Online (Sandbox Code Playgroud)

用法1:

optimize-images.sh /images/dir
Run Code Online (Sandbox Code Playgroud)

用法2:

cd /images/dir
optimize-images.sh 
Run Code Online (Sandbox Code Playgroud)