問題タブ [jpegoptim]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - ASP.Net の jpegoptim - 「一時ファイルを開くときにエラーが発生しました」
jpegoptim が一時ファイルを書き込もうとする場所を理解できていないのではないかと思います。
IIS 7.5 で ASP.Net 4 AppDomain を実行しています。その中に、次のように jpegoptim で JPEG を最適化するプロセスがあります。
ローカルで実行すると、最適化された画像が得られます。上記のサーバーで実行すると、次のようになります。
D:\www\hplusf.com\b\pc\test.jpg 4096x2990 24bit N Adobe [OK] jpegoptim: 一時ファイルを開くときにエラーが発生しました。
のコードを表示できますがFileHelper.Copy()
、基本的にFile.Copy()
は、ファイルが既に存在する場合に上書きするだけです。
ImageHelper.JpegOptim は次のとおりです。
jpegOptimResult は、生成されているエラー メッセージとして表示されているものです。ProcessRunner.RunProcess は次のとおりです。
そう:
jpegOptim は私のローカル マシンで適切に動作し、ファイルを最適化するので、jpegOptim を呼び出す方法とは異なります。
コピー操作は例外なく成功するため、そのディレクトリからの ASP.Net ユーザーの読み取り/書き込みに関するアクセス許可の問題ではありません。
jpegOptim はファイルを最適化して上書きするだけなので、実際に同じ ASP.Net ユーザーの下で実行されている場合、このファイルの書き込みに問題はないはずですが...
jpegOptim がその一時ファイルをどこに書き込もうとしているかは不明であるため、おそらく根本的な問題は、この一時ファイルがどこに書き込まれているのかということです。
ただし、Windows ソースから判断すると、次のようになります。
http://sourceforge.net/p/jpegoptim/code/HEAD/tree/jpegoptim-1.3.0/trunk/jpegoptim.c
jpegOptim の「一時ファイル」は、上記のオプションを使用すると、目的のファイルのように見えます。関連する jpegOptim ソースの行:
dest=1 を設定する -d 引数を探しているコードがいくつかあります。つまり、ここでは dest は 0 のままです。次に if 分岐にヒットし、dest == 0 の else 句がこれを行います。
これは、入力画像ファイル名のディレクトリ名部分を変数にコピーするtmpdir
ことです.C:\Blah\18.jpgが割り当てるようにtmpdir="C:\Blah\"
. 次に、入力画像ファイル名全体を にダンプしますnewname
。つまり、その場で上書きするだけです。
コードのこの時点で、使用している変数は次のようになります。
その後、実際にファイルを開きますが、そこにエラーが発生する可能性があり、jpegoptim がファイルを正常に開いていることを示唆しています。また、ファイルが正常に開かれていることをさらに確認して、ファイルを解凍します。
私が見ている特定のエラーメッセージは、これらの行で発生します-MKSTEMPSがデフォルトビルド(私が使用している)に設定されているかどうかわからないことを告白します:
これsnprintf
は C#String.Format()
のようなもので、次のようなパスを生成する必要があります。
D:\www\hplusf.com\b\pc\jpegoptim-1-2.XXXXXX.tmp
私が見つけたものから判断すると、MKSTEMPS が定義されていない可能性がありますfopen
。つまり、「wb」で呼び出されているという意味であり、バイナリ ファイルを書き込んでおり、null を返しているという意味で、開くことができず、エラー メッセージが表示されます。
だから - 考えられる原因:
tmpdirのパスが正しくありません C++ の手順をよく踏襲していない可能性があります (おそらく) が、見た目からすると、イメージのソース パスと同じである必要があります。しかし、おそらくそれは tmpdir のために jpegoptim によって破壊されたのでしょうか? 入力パスは、jpegoptim が実際にエラー メッセージでクリーンに出力するため、明らかにクリーンです。
アクセス許可の問題かなりありそうにありません。これが実行されているASP.Netユーザーは、jpegoptimが起動する前にディレクトリにコピーされるため、明確に読み書きできます。このディレクトリへのアクセス許可を持つマシン上の唯一のユーザーはそのユーザーであるため、jpegoptimはこの時点より前に失敗するはずですパーミッションの場合。別のディレクトリにアクセスしようとしている可能性がありますが、それは実際には悪い tmpdir シナリオです。
私が考えていない他の何か。
アイデア?
注:この質問は似ています:
C# で jpegtran、jpegoptim、またはその他の jpeg 最適化/圧縮を使用する
ただし、その質問は GoDaddy の共有環境について尋ねているため、プロセスをスピンアップできない可能性について回答が渦巻いています。私たちはサーバーを完全に制御しており、上記から明らかなように、jpegoptim プロセスは間違いなく正常に開始されているため、別のシナリオです。
php - jpegoptim PHP shell_exec が画像を圧縮しない
Linux Centos 6.5 を実行しており、jpegoptim をインストールしています。
これを確認するために、yum install jpegoptim を実行したところ、次の結果が得られました。
パッケージ jpegoptim-1.4.4-1.e16.x86_64 は既にインストールされており、最新バージョンです。
次を実行すると圧縮は行われませんが、画像は正しいパスに保存され、エラーは発生しません。
以下を実行すると、何も入っていない画像ファイルが正しいパスに保存され、エラーは発生しません。
PHPからshell_execを使用してjpegoptimを呼び出して圧縮した人はいますか?
python - Python: Optimizing Images in Memory (StringIO & POpen with jpegoptim)
I'm trying to compress images without touching disk using the STDIN version of various libraries(jpegoptim in this example).
This code does not return an optimized(jpegoptim compressed) image.
Can someone please help or explain why this usage of Popen() with a StringIO.StringIO() object does not return the optimized version of the image? If I save the file to disk, it works just fine.
php - shell_exec() で画像を保存する - imagejpeg と jpegoptim を使用し、stdin / stdinout で
1 回目は imagejpeg で作成し、次に jpegoptim で圧縮して上書きします。画像を2回保存しないように、これを1回で行うにはどうすればよいですか?
Jpegoptim にはstdin と stdoutがありますが、それらの使用方法を理解するのに苦労しています。
シェルで画像を保存したいので、次のようなものを想像します。
しかし、残念ながら、それは私が想像したようには機能しません。
c# - RedirectStandardInput と RedirectStandardOutput を使用して jpegOptim を呼び出す
比較的単純なはずのことをしようとしています.C#からjpegoptimを呼び出します。
私はそれをディスクにうまく書き込むことができますが、ストリームを受け入れてストリームを発行するようにすることは、これまでのところ私を避けてきました-私は常に長さ0の出力または不吉な「パイプが終了しました」になります。
私が試した1つのアプローチ:
私もこの解決策を試しました:
http://alabaxblog.info/2013/06/redirectstandardoutput-beginoutputreadline-pattern-broken/
同じ問題。出力長 0。出力リダイレクトなしで jpegoptim を実行すると、最適化されたファイルが得られますが、この方法で実行すると得られません。
これを行う正しい方法があるはずですか?
更新: 手がかりが見つかりました - 恥ずかしがらないでください - jpegoptim は、2014 年の実験的なビルドまで stdin へのパイプをサポートしていませんでした。今年修正されました。私が持っているビルドは、2013 年の古いライブラリからのものです。https://github.com/tjko/jpegoptim/issues/6
bash - find コマンドを使用して複数の拡張機能のバッチ ジョブを実行する方法は?
サーバー上のすべてのjpgおよびjpeg画像を再帰的に最適化するためにjpegoptimを使用しようとしています。
このコマンドは機能しています:
しかし、私はこのようなものが必要です:
これは機能していません。それを行う方法はありますか?
image - 画像を縮小して最適化する方法は?
現在jpegoptim
、CentOS 6 で使用しています。品質とファイル サイズのベンチマークを設定できます。ただし、画像のサイズを変更することはできません。
最大幅と最大ファイル サイズに縮小したいすべてのファイル サイズと寸法の 5000 枚の画像があります。
たとえば、すべての画像を最大幅 500 ピクセルおよび 50 KB に縮小したいと考えています。
これらの画像をすべて縮小して最適化するにはどうすればよいですか?
jpeg - jpegoptim vs jpegtran vs mozjpeg
この件に関して、わずかに矛盾する 2 つのブログ投稿を見つけました。ここで要約します。
- jpegoptim と jpegtran は同じように動作し、同じ結果を生成しますが、mozjpeg はわずかなファイルサイズの節約に 2 倍の時間がかかります
- mozjpeg は約 1.7* の計算時間を要し、jpegtran と比較してファイルサイズの節約にほぼ比例する利点があります。
混乱に加えて、この Reddit スレッドは、mozjpeg が jpegcrush で使用されているのと同じアルゴリズムを使用していること、および jpegcrush が jpegtran のラッパーであることを示唆しています...つまり、完全な円になったのですか? これらの Reddit のコメントは間違っているとしか思えませんが、それを確認できる人はいますか?
pillow - jpegtran は、libjpeg-turbo、jpegoptim、および mozjpeg とどのように関連していますか?
私が理解していることから、jpegtranはlibjpeg-turboに含まれており、optimize=True
. jpegoptim は jpegtran と同じアルゴリズムを使用しますが、画像を最適化する前に一時的にディスクに保存する必要があり、jpegoptim には可逆圧縮する追加機能があります。
Github の mozjpeg リポジトリを見ると、libjpeg-turbo への参照がたくさんあり、スターがはるかに多いので、私の質問はそれらがどのように関連しているのかということです。mozjpeg は libjpeg-turbo のフォークであり、すべてを実行しますか? つまり、mozjpeg の特定の機能を無効にして、最終的に libjpeg-turbo と同じパフォーマンスと結果を得ることは可能ですか?