2011-04-07 26 views
16

我需要優化一些圖像,但不能更改它們的名稱。jpegtran優化不改變文件名

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

但是,這似乎創建的文件大小爲0.當我做到不同的文件名時,大小仍然完全相同。

+0

看到這個職位 http://stackoverflow.com/questions/15835351/jpegtran-whole-directory – Bas 2013-04-07 08:14:02

回答

24

怎麼樣:

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

我不以任何方式外殼的專家,但我認爲,與原有的命令,只要它被執行時,重定向設置這將覆蓋你的形象.JPG。然後,當jpegtran嘗試讀取它時發現一個空文件。

+1

不起作用:(顯然對於海報)/ – 2011-05-26 22:08:53

+0

克萊門特請提供詳細資料,這對我的作品 – so12311 2011-05-27 00:04:04

+0

那麼,Jpegtran只接受1個參數,即原始文件名。給他第二個參數,就像你一樣,讓他拋出一個例外。這段代碼可以在windows上運行,但不能在linux上運行。您必須使用'jpegtran -copy none -optimize -outfile image.jpg> newimage.jpg'作爲OP說的,但是,它不是文件替換。精確性:我在Ubuntu/Jpegtran版本8b上測試過,也許其他版本可以與你的代碼一起工作。 – 2011-05-27 13:36:50

2

我做到了三行:

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

效果很好。

[編輯]這一次只適用於一個文件。

+8

jpegtran -optimize image.jpg> image.jpg-opt && mv image.jpg-opt image.jpg – MarutiB 2012-07-04 05:49:54

9

我使用這個腳本。作品完美無瑕。我希望這有幫助。

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 
+0

謝謝! IMos,shell腳本就像一個魅力 – anshuman 2013-01-15 12:35:03

+0

很高興能幫到@anshuman – imos 2013-03-15 10:24:13

+0

謝謝,但是當腳本在名字中有空格的目錄下運行時(它很糟糕,但它發生了),腳本不起作用。 – kursus 2013-11-11 21:54:33

2
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

+1

添加'-progressive'是出於性能原因的一個好主意 - http://blog.patrickmeenan.com/2013/06/progressive-jpegs-ftw.html – 2016-03-23 21:38:32

0

不支持,如果-outfile另一種選擇:

jpegtran -copy none -optimize image.jpg | sponge image.jpg 

spongemoreutils一部分。

1

如果沒有海綿,HDD或SSD寫入權限較低的另一種替代方法是使用/ dev/shm保存臨時文件,然後立即在本地覆蓋它。

jpegtran -copy none -optimize image.jpg > /dev/shm/tmp.jpg && cat /dev/shm/tmp.jpg > ./image.jpg 

的概念可以很容易地改編成任何腳本,也許對臨時文件名不能是相同的,爲了避免衝突,如果有在同一時間運行多個實例告誡。考慮一些獨特的文件名模式生成方案可能很有趣,可能是沿着${originalfilename}-jpgtrantmp-$$的方向。