最高のJava画像処理ライブラリ/アプローチは何ですか?[閉まっている]


244

JAIメディアAPIとImageMagickの両方を使用していますか?

ImageMagickにはいくつかのスケーラビリティの問題があり、JNIベースのJMagickも魅力的ではありません。JAIは、ImageMagickと比較して、サイズ変更操作を実行すると品質が低下します。

ネイティブJavaで高品質の結果を提供するオープンソースまたは商用の優れたツールを知っている人はいますか?


5
JMagickには、javadocs以外のドキュメントはほとんどありません。とても簡単にできるはずのことを2時間かけて検索しました。
Alex Ciminian 2010

確かに。プロセスを管理する手段として、Apache execを使用して、プロセスから抜け出し、ImageMagickを使用することを選択しました。これはうまくいきました。私は、この目的のためだけにイメージサーバーを構築するところまで行ったかもしれません。ImageMagickの品質と機能を備えたものを見つけるのは難しいです。
Daniel Honig 2010

158
このような質問がトピック外としてクローズされるのはばかげています。10万回を超える視聴数は、明らかに人々が求めている質問です。時々、人々は前もってやろうとしていることすべてを正確に知らないことがあり、最良の一般的なフレームワークに関する他の人々の「意見」の返答を高く評価するでしょう。SOでの大げさなモデレーションが多すぎます。
user467257 2014年

12
人々がJavaプログラミングの主要な側面の方法の長所と短所を議論する場合、何が問題になっていますか?SOがすべきことではないですか?私見、このような質問は慎重に管理および保守して、特定のトピックについて開発者が新たに開始する際の参考になるようにする必要があります。
ラウル

20
うん。Googleでの上位の結果java image processing libraryですが、通常どおり閉鎖されています。最近、SOでモデレーションが過剰に行われています。
Stijn de Witt

回答:


88

ImageJがあります。

世界最速のピュアJava画像処理プログラム

別のアプリケーションのライブラリとして使用できます。そのアーキテクチャは素晴らしいものではありませんが、基本的な画像処理タスクを実行します。


2
ImageJをいくつかの画像処理アプリケーションのライブラリとして使用しています。それは非常にまともなJavaライブラリです。Java2Dともうまく統合されているため、2つを簡単に組み合わせることができます。
hohonuuli

3
私がImageJを使用したとき、そのAPIはかなりぎこちなく、ライブラリではなくプラグインを記述できるアプリケーションです。そして、私が覚えている限り、その古いAWTコードベースで新しいGUIを開発しようとするのは苦痛でした。
Ivan

4
単純な画像の回転、拡大縮小、切り抜きを行うのに半日無駄になりました。それは2019年であり、ImageJのドキュメントは使用できません。
M.レオンハルト

133

私はこの質問がかなり古いことを知っていますが、新しいソフトウェアが出てくると、人々にとって興味深いかもしれないプロジェクトへの新しいリンクを取得するのに役立ちます。

imgscalrを使用する痛いほど単純で純粋なJavaの画像(等、及びパディングのような単純なOPS、クロッピング、明るく、回転/調光)リサイズライブラリである-単一のクラスは、すべてのように定義された単純なグラフィックス操作のセットで構成静的メソッドその画像を渡して結果を返します。

ライブラリを使用する最も基本的な例は次のようになります。

BufferedImage thumbnail = Scalr.resize(image, 150);

そして、いくつかの高品質の微調整などを使用して画像のサムネイルを生成するより一般的な使用法は、次のようになります。

import static org.imgscalr.Scalr.*;

public static BufferedImage createThumbnail(BufferedImage img) {
    // Create quickly, then smooth and brighten it.
    img = resize(img, Method.SPEED, 125, OP_ANTIALIAS, OP_BRIGHTER);

    // Let's add a little border before we return result.
    return pad(img, 4);
}

すべての画像処理操作は、生のJava2Dパイプライン(主要プラットフォームでハードウェアアクセラレーションされたもの)を使用し、コードでのライブラリ競合などのJNIを介した呼び出しの苦痛をもたらしません。

imgscalrは、かなりの数の場所で大規模なプロダクションにも展開されています。AsyncScalrクラスを含めると、サーバー側の画像処理に最適なドロップインになります。

最高のULTRA_QUALITYモードで速度と品質のトレードオフに使用できる画像品質の調整が多数あり、GIMPのLancoz3実装よりも見栄えの良いスケーリングされた結果を提供します。


@Riyad Kalla興味深いことに思えます...しかし、商用プロジェクトで使用することはできませんか?
user592704 2013年

2
@ user592704もちろん、imgscalrはApache 2ライセンスに基づいてライセンスされています。Apache Foundationのすべてが同じライセンスでライセンスされています。あなたはそれを取って、オープンソースや商用製品でそれを使ってやりたいことができます。imgscalrは、実際にはすでに本番環境の多くの商用Webアプリにデプロイされています。
Riyad Kalla 2013年

1
@DavidParks正解です。imgscalrは、BufferedImageインスタンス(デコードされた画像データ)を取得した後ではなく、引き継ぐことを目的としています。それらのパイプラインは長い間Java2Dチームによって隠蔽されたハードウェアアクセラレーションであったため、独自のデコーダー/エンコーダーを試そうとする道を踏むことさえ考えたくありませんでした-バグのない効率的な作業をすべてやり直そうとしました大変な仕事になるでしょう。
リヤドカラ2013

1
@gstackoverflow imgscalrは、未加工のBufferedImageインスタンス(デコードされた画像データ)で動作します。そのため、別の何か(通常はImageIOライブラリ)は、エンコードされた画像データをBufferedImageにデコードし、imgscalrの動作が完了すると、新しい画像に再エンコードする必要があります。言い換えれば、「imgscalrはファイル形式を気にしない、imgscalrに渡す前に画像をすでにデコードしている」
Riyad Kalla

1
ImgScalrは、基本的な画像操作にのみ適しています。画像の読み込みと処理に関しては。それは複雑さを欠いています。
MarekM、2015

31

別の良い選択肢:マービン


9
どうもありがとう。あなたは私の日を救った!:D(PS:私はOPではありません。グーグルで信頼しているときにこの投稿に出くわしました。とても助かりました!(いつか会ったらビールを買います)。)
missingfaktor

3
@missingfaktor今私はあなたにビールを借りています。ヨセフへのあなたの賛美は私の日も救いました。ジョセフ、あなたもビールを飲んでいます:)!
FilipDupanović

3
そのURLは明らかに存在しないようですが、marvinproject.sourceforge.netが新しいURLのようです。
Amos M. Carpenter

さて、私はこれを一見する義務があります。=)
Marvo、2012

本当によさそうだ、それを試してみます。
Ridcully 2013


8

処理は新しいですが、非常に良いです。


1
処理は承知していますが、実際に処理を使用しているのですが、X jpegのファッションのライブラリでX変換を実行しますか?
Daniel Honig

私はそれを使用しましたが、本当に強力で賭ける価値があるようです
fmsf 2009年

2
実際には、(組み込み機能に使用できる)コアライブラリはLGPLです。しかし、だれもライセンスが何であるか尋ねませんでした。wiki.processing.org/w/...
ベンジャミン・アトキン

5

Catalano Frameworkを使用してみてください。

キーポイント:

  • AForge.NET/Accord.NETのようなアーキテクチャ。
  • デスクトップとAndroidを同じコードで両方の環境で実行します。
  • 複数のフィルターが並列に含まれています。
  • 開発は本格的に進んでいます。

Catalano Frameworkは、JavaおよびAndroid向けの科学計算用フレームワークです。プロジェクトは、.NET用のAForge.NETおよびAccord.NETフレームワークの多くの機能の初期ポートとして開始されましたが、これらのプロジェクト間で共有されているより高度な機能で着実に成長しています。

例:

FastBitmap fb = new FastBitmap(bitmap);

Grayscale g = new Grayscale();
g.applyInPlace(fb);

Threshold t = new Threshold(120);
t.applyInPlace(fb);

bitmap = fb.toBitmap();

//Show the result

6
The best framework in Java is Catalano Framework自分の製品を宣伝しているようですね。あなたのフレームワークは素晴らしいかもしれませんが、よくある質問で述べられているように、あなたはそれとの関係を開示すべきです。
マティアスブラウン

@MatthiasBraun OK、私はあなたに同意し、私はそれについて知りませんでした。回答を編集しました。
ディエゴ


4

最善のアプローチは、Javaのコマンドラインインターフェイスとしてim4javaでGraphicsMagick画像処理システムを使用することです。

GraphicsMagickには多くの利点がありますが、すべてに1つあります。

  • GMは、世界最大の写真サイト(FlickrやEtsyなど)で数十億のファイルを処理するために使用されます。

it;これは単なるコマンドラインラッパーです
Kulpemovitz

3

http://im4java.sourceforge.net/-Linuxを実行している場合、新しいプロセスをforkすることは高価ではありません。


ただし、メモリ不足エラーに
注意し

フォークは高価です。大量のメモリを使用する可能性があります。以下の下部にある記事から人の引用を参照してくださいcoderanch.com/t/419196/java/java/there-any-way-execute-Linux (記事は以下のとおりです。developers.sun.com/solaris/articles/subprocess/subprocess .html
Plaudit Design 2011

@Plauditチェックアウトgm4java。インタラクティブモードでGMプロセスのプールを作成し、画像を変換するために毎回フォークする必要はありません。kennethxu.blogspot.com/2013/04/…–
Kenneth Xu

2

商用ツールについては、Snowboundを試してみてください。

http://www.snowbound.com/

彼らとの私の経験は少し古いですが、Java Imaging APIはJAIよりもはるかに使いやすく、はるかに高速であることがわかりました。

カスタマーサポートとコードサンプルも非常に優れていました。



1

「最高の」ライブラリであるとは言えませんが、これを試すことができると思います。http//algart.net/java/AlgART/ これは、オープンソースのJavaライブラリであり、さまざまなタイプの要素(1ビットから64ビットの浮動小数点)。2D、3D、および多次元画像処理や、配列や行列を操作するその他のアルゴリズムが含まれます。残念ながら、現時点では十分なデモと例が含まれていませんが、一方で、多くのJavaDocが含まれています。それは数年の間商用ソフトウェア(SIMAGIS)のベースにありましたが、現在はオープンソースです。


2
このリンクで質問に答えることができますが、回答の重要な部分をここに含め、参照用のリンクを提供することをお勧めします。リンクされたページが変更されると、リンクのみの回答が無効になる可能性があります。
Matthias

あなたは正しい、私は最初のコメントを編集しました。
Daniel
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.