問題タブ [libjpeg-turbo]
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.
memory - jpegロスレス変換 - メモリ消費?
http://jpegclub.org/jpegtran/から最新の win32 jpegtran.exeをダウンロードしたところ、次のことがわかりました。
14500 x 10000 ピクセルの 24 BPP jpeg テスト イメージを用意しました。
- ファイルシステムの圧縮サイズは約7.5 MBです。
- メモリに解凍すると (一部の画像ビューアーを使用)、約450 MBに膨らみます。
ロスレス ローテーション中の jpegtran.exe コマンド ライン ツールのメモリ消費を監視する (180) プロセスが最大900 MBのメモリを消費していることがわかります。
このようなjpeg ロスレス変換では、画像ファイルをメモリにデコードする必要はなく、代わりに、エンコードされたファイル自体に対して数学的変換を実行するだけで、メモリのフットプリントを非常に低く保つことができると想定していました。
次のうちどれが正しいですか?
- この特定のツールの実装におけるいくつかのバグ
- 私が逃したいくつかの設定スイッチ
- 私の最後にいくつかの誤解があります(つまり、jpegロスレス変換も画像をメモリにデコードする必要がありますか?)
- 「画像をメモリにデコードする」よりもさらに多くのメモリを消費する「数学演算」
編集:
JasonD の回答によると、理由は後者のようです。だから私は私の質問を拡張します:
これらの操作を小さなチャンクで実行できる実装はありますか(高いメモリ使用量を避けるため)? それとも、常に全体的に行う必要があり、それを回避する方法はありませんか?
PS:
独自のコーデック/アルゴリズムを実装する予定はありません。代わりに、私の要件を満たす実装があるかどうかを尋ねています。または、少なくとも理論的には可能であれば。
linux - Ubuntu12.0.4にlibjpeg-turbo8をインストールする方法
Googleが提案しているように、Ubuntuサーバーでhttp://jpegclub.org/jpegtran/を動作させようとしていますが、エラーが発生します。
「jpegtran:共有ライブラリの読み込み中にエラーが発生しました:libjpeg.so.8:共有オブジェクトファイルを開くことができません:そのようなファイルまたはディレクトリはありません」
Googleの検索で、libjpeg-turbo8を(apt-get経由で)インストールするように言われましたが、apt-getはパッケージを見つけることができません。私自身のUbuntuコンピューター(12.0.10を実行)はパッケージを問題なく見つけることができます。
http://sourceforge.net/projects/libjpeg-turbo/をインストールしてみましたが運が悪かったです。
私は何か間違ったことをしているのですか、それとも何かを逃したのですか?jpegtranを機能させるにはどうすればよいですか?
java - Android JNi の例で libjpeg-turbo ライブラリを使用する方法
この投稿のおかげで、ndk-build を使用して libjpeg-turbo を正常にビルドできました: libjpeg-turbo for android
libjpeg-turbo の example.c で read_JPEG_file のようなネイティブ関数を取得し、Java コードから呼び出して Android アプリに使用したいと考えています。
誰かがそれを行う方法の例を教えてもらえますか? libjpeg-turbo ndk ビルド ライブラリを使用する Java のネイティブ メソッドを作成するにはどうすればよいですか?
ライブラリをロードできます
しかし、次は何ですか?ライブラリには、Java から呼び出すネイティブ メソッドはありません。
JNI ドキュメントに従って JNI c クラスを作成しようとしましたが、成功しませんでした。サンプルコードは、その方法を学ぶのに最適です。
編集:
テスト クラス NativeMethods を作成しました。
次に、javah を使用してネイティブ メソッドの C ヘッダーを生成します。結果は、以下com_test_app_NativeMethods.h
を含むファイルです。
JPEGProcessing.c
次に、ネイティブ関数の c 実装を次のように配置するという名前のファイルを作成しました。
ファイルJPEGProcessing.c
とフォルダ内com_test_app_NativeMethods.h
にありproject/jni/
ます。同じ jni フォルダーにAndroid.mk
、次の行を配置するファイルを作成しました。
プロジェクト ディレクトリから ndk-build を実行した後、いくつかのエラーが発生しました。
理解できません。コードをlibjpeg-turbo関数と組み合わせて作業ライブラリを取得し、Javaで使用するにはどうすればよいですか?
NDK の説明と例を読みましたが、まだわかりません。
編集:
シンプルなネイティブ メソッドを使用した NDK と JNI は問題なく動作します。テストとして、うまく機能する次の簡単な方法を使用しました。
次のようにlibjpeg-turboのもので試しました:
そして、エラーが発生します...:
では、ndk でビルドされた libjpeg-turbo ライブラリでネイティブ コードを使用するにはどうすればよいでしょうか。
java - libjpeg-turbo java encode jpeg
Macにlibjpeg-turboをインストールし、eclipseプロジェクトにjarとlibsを追加しました。バッファリングされた画像からjpegbyte[]を作成しようとしています:
私が得るエラーは次のとおりです:java.lang.Exception:tjBufSize():無効な引数
カスタムロボットを使用して、タイプTYPE_3BYTE_BGRのバッファリングされたイメージを作成します。ImageIOを使用してbyte[]を作成できますが、速度が遅くなります。
Javaラッパーでいくつかのチュートリアルを見つけようとしましたが、bufferedimageからjpegをエンコードするチュートリアルは見つかりませんでした。誰かが私を助けてくれたらとてもありがたいです。
ruby-on-rails - Heroku Cedar スタック (Ruby ビルドパック) の image_optim gem を使用した libjpeg
image_optimジェムを Heroku の Cedar スタック上の Rails 4 アプリと連携させて、png/gif/jpeg 画像を最適化しようとしています。
必要なバイナリ ( advpng
、gifsicle
、jpegoptim
、jpegtran
、optipng
、) をイニシャライザに投入して設定しましpngcrush
た。これは gif と png では機能しますが、jpeg では問題が発生します。pngout
/bin
ENV['PATH'] = "#{Rails.root}/bin:#{ENV['PATH']}"
レールコンソールで私は得る:
irb(main):001:0> `jpegoptim`
jpegoptim: error while loading shared libraries: libjpeg.so.8: cannot open shared object file: No such file or directory
libjpeg
Heroku にインストールするにはどうすればよいですか?
android-ndk - SIMD を使用しない Android アプリの libjpeg-turbo
ここのレシピに従って、Android アプリで libjpeg-turbo ライブラリを正常にコンパイルしました: libjpeg-turbo for android。
ライブラリ内の NEON SIMD 命令のパフォーマンスの向上を評価しようとして、NEON サポートを有効/無効にしようとしました。興味深いことに、違いはありません。
コードを掘り下げると、 in は実行時に実行されないように見えinit_simd()
ますjsimd_arm.c
。
この関数はlibjpeg_arch_specific_init()
、ライブラリが最初にロードされたときに呼び出されます。
この不具合は、このライブラリが動的ではなく静的であるため、「ロード」されていないことが原因であると考えられます (このスレッドの最後にある DRC からのコメントを参照してください: http://sourceforge.net/p/libjpeg-turbo/patches/26/ )
それは理にかなっていますか?他の誰かがこの問題を見ましたか?
ありがとう!
java - libjpeg-turbo の Java ラッパーを実際に圧縮するにはどうすればよいですか?
Java プロジェクトで実際に画像を圧縮するために libjpeg-turbo を取得するのに問題があります。これは .jpg をうまく書き込みますが、結果の最終的なサイズは常に、たとえば同じ画像の 24 ビット ウィンドウの .bmp とほぼ同じになります。480x854 の画像は、以下のコード スニペットを使用して 1.2 メガバイトの jpeg に変換されます。GRAY サンプリングを使用すると、800Kb になります (そして、これらはそもそも派手な画像ではありません。ほとんどの場合、私が取り組んでいるゲームの原色ディスクが塗りつぶされたニュートラルな背景です)。
これまでに得たコードは次のとおりです。
私は特に、このプロジェクトのサンプル Java 使用ドキュメントを見つけるのに苦労しています。ほとんどの場合、C のバックグラウンド/使用法を前提としています。私は圧縮に渡すフラグを理解していません (また、jpeg 標準の内部構造を本当に知っているわけでもなく、知りたいわけでもありません :)!
ありがとう!
android - libjpegturbo で画像のバッチを圧縮すると奇妙な結果が生じる
まず、私が (したい) こと: 画像 (jpg) のバッチを圧縮して縮小します。元の画像のサイズが幅 1600 x 高さ 1200 であると仮定します。今、1600x1200 の圧縮コピーと、800x600 および 400x300 の圧縮コピーが必要です。
私が使用するもの: これを達成するために libJpegTurob を使用しています。LibJpegTurob に問題がある場合は、android の指定されたメソッドを使用しようとします。
すでに試したこと: まず、Tom Gall ( https://github.com/jberkel/libjpeg-turbo )から移植された Java Wrapper を使用しました。
4MBを超える写真を使い始めるまで、(nexus 4で)かなりうまくいきました。基本的に起こったのは、アンドロイドが OutOfMemory 例外をスローしたことです。これは、小さい画像 (~1-2mb) を使用したときに発生しましたが、次々に圧縮されました。
nexus s のような低メモリの予算のデバイスでこれを実行した後、これはさらに悪化しました。低ヒープが原因の問題、それが私が思うことです。
じゃあ、cでやらないといけないと思いました。低予算のデバイスで 3 MB より小さい画像を使用している限り、メモリの問題は解決したようです。nexus 4 では、15 MB を超える画像を圧縮することさえできました。
これがsrcの写真です。
しかし今... 問題。最初の圧縮された画像は良さそうです
しかし、他のすべてのものはこれ
またはこのように見えます
これは、選択した写真を保持して圧縮している限り発生しました。
今コード。
これは、スケーリングと圧縮が行われた場所です
圧縮を開始するJava部分..
私は何を間違っていますか???
どうもありがとう!!
PS下手な英語でごめんなさい!