web-dev-qa-db-ja.com

jpegtranはファイル名を変更せずに最適化します

一部の画像を最適化する必要がありますが、名前は変更しません。

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

ただし、これによりファイルサイズが0になるようです。別のファイル名でファイルサイズを変更しても、サイズはまったく同じです。

20
David

どうですか:

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

私は決してシェルの専門家ではありませんが、元のコマンドを実行するとすぐに、image.jpgを上書きするリダイレクトが設定されると思います。次に、jpegtranがそれを読み取ろうとすると、空のファイルが見つかります。

26
so12311

このスクリプトを使用します。完璧に動作します。これがお役に立てば幸いです。

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 
10
imos
jpegtran -copy none -progressive -optimize -outfile filename filename

包括的な最適化の場合:-copy noneは、ソースjpegに存在するすべてのコメントおよびその他の超過手荷物を抑制するようにjpegtranに指示しますプログレッシブはプログレッシブjpegを生成し、-optimizeは実際の最適化を実行し、 -outfileは、出力ファイル名を設定します。最後のパラメータは入力ファイル名です。同じ場合、ファイルはその場で最適化されます。

編集:ロスレスjpeg圧縮ツールに関するこの記事によると、mozjpegも試してみてください http://blarg.co.uk/blog/compareson-of-jpeg-lossless-compression-tools

2
Mauro Colella

私は3行でそれをしました:

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

うまく機能します。

[編集:]これは、一度に1つのファイルに対してのみ機能します。

2
ZurabWeb

スポンジを使用しない場合、HDDまたはSSDの書き込みアクセスが少ない別の方法は、/ dev/shmを使用して一時ファイルを保存し、すぐにローカルで上書きすることです。

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

複数のインスタンスが同時に実行されている場合の衝突を回避するために、この概念は、一時ファイル名が同じでないことに関する警告を含めて、任意のスクリプトに簡単に適合させることができます。おそらく${originalfilename}-jpgtrantmp-$$に沿った、独自のファイル名パターン生成スキームについて考えるのは興味深いかもしれません。

1
Jay Pegg

-outfileがサポートされていない場合の別のオプション:

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

spongemoreutils の一部です。

0
Jackson Pauls