我需要優化一些圖像,但不能更改它們的名稱。jpegtran優化不改變文件名
jpegtran -copy none -optimize image.jpg > image.jpg
但是,這似乎創建的文件大小爲0.當我做到不同的文件名時,大小仍然完全相同。
我需要優化一些圖像,但不能更改它們的名稱。jpegtran優化不改變文件名
jpegtran -copy none -optimize image.jpg > image.jpg
但是,這似乎創建的文件大小爲0.當我做到不同的文件名時,大小仍然完全相同。
怎麼樣:
jpegtran -copy none -optimize -outfile image.jpg image.jpg
我不以任何方式外殼的專家,但我認爲,與原有的命令,只要它被執行時,重定向設置這將覆蓋你的形象.JPG。然後,當jpegtran嘗試讀取它時發現一個空文件。
不起作用:(顯然對於海報)/ – 2011-05-26 22:08:53
克萊門特請提供詳細資料,這對我的作品 – so12311 2011-05-27 00:04:04
那麼,Jpegtran只接受1個參數,即原始文件名。給他第二個參數,就像你一樣,讓他拋出一個例外。這段代碼可以在windows上運行,但不能在linux上運行。您必須使用'jpegtran -copy none -optimize -outfile image.jpg> newimage.jpg'作爲OP說的,但是,它不是文件替換。精確性:我在Ubuntu/Jpegtran版本8b上測試過,也許其他版本可以與你的代碼一起工作。 – 2011-05-27 13:36:50
我做到了三行:
jpegtran -optimize image.jpg > image.jpg-opt
cp image.jpg-opt image.jpg
rm image.jpg-opt
效果很好。
[編輯]這一次只適用於一個文件。
jpegtran -optimize image.jpg> image.jpg-opt && mv image.jpg-opt image.jpg – MarutiB 2012-07-04 05:49:54
我使用這個腳本。作品完美無瑕。我希望這有幫助。
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 -copy none -progressive -optimize -outfile filename filename
對於全面優化:-copy無告訴jpegtran禁止所有註釋和其他超額行李存在於源jpeg中,遞增生成漸進式jpeg,-優化執行實際優化,並且-outfile設置輸出文件名。最後一個參數是輸入文件名:如果它們相同,則文件將進行優化。
編輯:你可能也想嘗試mozjpeg,根據這篇文章的無損JPEG壓縮工具http://blarg.co.uk/blog/comparison-of-jpeg-lossless-compression-tools
添加'-progressive'是出於性能原因的一個好主意 - http://blog.patrickmeenan.com/2013/06/progressive-jpegs-ftw.html – 2016-03-23 21:38:32
不支持,如果-outfile
另一種選擇:
jpegtran -copy none -optimize image.jpg | sponge image.jpg
sponge
是moreutils一部分。
如果沒有海綿,HDD或SSD寫入權限較低的另一種替代方法是使用/ dev/shm保存臨時文件,然後立即在本地覆蓋它。
jpegtran -copy none -optimize image.jpg > /dev/shm/tmp.jpg && cat /dev/shm/tmp.jpg > ./image.jpg
的概念可以很容易地改編成任何腳本,也許對臨時文件名不能是相同的,爲了避免衝突,如果有在同一時間運行多個實例告誡。考慮一些獨特的文件名模式生成方案可能很有趣,可能是沿着${originalfilename}-jpgtrantmp-$$
的方向。
看到這個職位 http://stackoverflow.com/questions/15835351/jpegtran-whole-directory – Bas 2013-04-07 08:14:02