jpegtran优化而不更改文件名
image
image-manipulation
image-processing
5
0

我需要优化一些图像,但不更改其名称。

jpegtran -copy none -optimize image.jpg > image.jpg 

但是,这似乎会创建一个0的文件大小。当我对其他文件名执行此操作时,大小仍然完全相同。

参考资料:
Stack Overflow
收藏
评论
共 4 个回答
高赞 时间 活跃

怎么样:

jpegtran -copy none -optimize -outfile image.jpg image.jpg

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

收藏
评论
jpegtran -copy none -progressive -optimize -outfile filename filename

要进行全面的优化: -copy none告诉jpegtran抑制源jpeg中存在的所有注释和其他多余的行李, 渐进式生成渐进式jpeg, -optimize执行实际的优化,并且-outfile设置输出文件名。最后一个参数是输入文件名:如果它们相同,则文件将在适当位置进行优化。

编辑:根据这篇有关无损jpeg压缩工具的文章,您可能还想尝试mozjpeg, 网址为http://blarg.co.uk/blog/comparison-of-jpeg-lossless-compression-tools

收藏
评论

我使用这个脚本。完美地工作。我希望这有帮助。

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

用法1:

optimize-images.sh /images/dir

用法2:

cd /images/dir
optimize-images.sh 
收藏
评论

我做到了三行:

jpegtran -optimize image.jpg > image.jpg-opt
cp image.jpg-opt image.jpg
rm image.jpg-opt

效果很好。

[编辑:]一次仅适用于一个文件。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号