Apa perpustakaan / pendekatan pemrosesan gambar java terbaik? [Tutup]

244

Saya menggunakan apis media JAI dan ImageMagick?

ImageMagick memiliki beberapa masalah skalabilitas dan JMagick berbasis JNI juga tidak menarik. JAI memiliki hasil kualitas yang buruk ketika melakukan operasi pengubahan ukuran dibandingkan dengan ImageMagick.

Apakah ada yang tahu alat luar biasa baik open source atau komersial yang asli java dan memberikan hasil berkualitas tinggi?

Daniel Honig
sumber
5
JMagick hampir tidak memiliki dokumentasi kecuali untuk javadocs. Saya baru saja menghabiskan dua jam mencari sesuatu yang seharusnya cukup mudah dilakukan.
Alex Ciminian
Memang. Saya memilih untuk keluar dari proses dan menggunakan ImageMagick menggunakan apache exec sebagai cara mengelola proses. Ini bekerja dengan baik. Saya mungkin telah melangkah lebih jauh dengan membangun server gambar hanya untuk tujuan ini. Sulit menemukan sesuatu dengan kualitas dan fungsionalitas ImageMagick.
Daniel Honig
158
Konyol kalau pertanyaan seperti ini ditutup di luar topik. Lebih dari 100.000 tontonan, jelas pertanyaan yang diajukan orang. Kadang-kadang orang tidak tahu persis semua yang akan mereka lakukan di muka, dan akan menghargai tanggapan "pendapat" orang lain tentang kerangka umum terbaik. Terlalu banyak moderasi berlebihan pada SO!
user467257
12
Apa yang salah jika orang mendiskusikan pro dan kontra tentang aspek-aspek kunci dari pemrograman Java? Bukankah yang seharusnya dilakukan SO? IMHO, pertanyaan-pertanyaan seperti itu harus dimoderasi dan dipelihara dengan hati-hati untuk memberikan referensi yang baik kepada pengembang mulai dari awal pada topik tertentu.
Raúl
20
Ya. Hasil teratas di Google untuk java image processing librarytetapi ditutup ... seperti biasa. Moderasi akan berlebihan pada SO hari ini.
Stijn de Witt

Jawaban:

88

Ada ImageJ , yang membanggakan menjadi

program pemrosesan gambar Java murni tercepat di dunia

Ini dapat digunakan sebagai perpustakaan di aplikasi lain. Arsitekturnya tidak cemerlang, tetapi mengerjakan tugas pemrosesan gambar dasar.

Ivan
sumber
2
Saya menggunakan ImageJ sebagai perpustakaan di sejumlah aplikasi pemrosesan gambar. Ini adalah perpustakaan Java yang sangat baik. Ini terintegrasi dengan baik dengan Java2D juga, sehingga Anda dapat mencampur dan mencocokkan 2 dengan mudah.
hohonuuli
3
Pada saat saya menggunakan ImageJ, API-nya cukup aneh. Ini lebih merupakan aplikasi yang Anda dapat menulis plugin daripada perpustakaan. Dan sejauh yang saya ingat, mencoba mengembangkan GUI baru dalam basis kode AWT lama itu menyusahkan.
Ivan
4
Saya hanya menghabiskan setengah hari untuk mencoba melakukan rotasi gambar sederhana, skala, dan memotong. Ini tahun 2019 dan dokumentasi ImageJ tidak dapat digunakan.
M. Leonhard
133

Saya tahu pertanyaan ini cukup lama, tetapi ketika perangkat lunak baru keluar, itu membantu untuk mendapatkan beberapa tautan baru ke proyek-proyek yang mungkin menarik bagi orang-orang.

imgscalr adalah pengubahan ukuran gambar Java murni (dan ops sederhana seperti padding, cropping, rotating, mencerahkan / meredup, dll.) perpustakaan yang sangat mudah digunakan - satu kelas terdiri dari serangkaian operasi grafis sederhana yang semuanya didefinisikan sebagai metode statis yang Anda melewatkan gambar dan mendapatkan kembali hasilnya.

Contoh paling dasar menggunakan perpustakaan akan terlihat seperti ini:

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

Dan penggunaan yang lebih umum untuk menghasilkan thumbnail gambar menggunakan beberapa tweak berkualitas dan sejenisnya mungkin terlihat seperti ini:

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);
}

Semua operasi pemrosesan gambar menggunakan pipa Java2D mentah (yang merupakan akselerasi perangkat keras pada platform utama) dan tidak akan memperkenalkan kesulitan memanggil melalui JNI seperti pertentangan perpustakaan dalam kode Anda.

imgscalr juga telah digunakan dalam produksi skala besar di beberapa tempat - dimasukkannya kelas AsyncScalr menjadikannya drop-in yang sempurna untuk pemrosesan gambar sisi server.

Ada banyak penyesuaian kualitas gambar yang dapat Anda gunakan untuk menukar antara kecepatan dan kualitas dengan mode ULTRA_QUALITY tertinggi yang memberikan hasil skala yang terlihat lebih baik daripada implementasi Lancoz3 GIMP.

Riyad Kalla
sumber
@Riyad Kalla sepertinya menarik terima kasih ... Tapi saya tidak mengerti apakah ini bisa digunakan dalam proyek komersial?
user592704
2
@ user592704 Tentu saja, imgscalr dilisensikan di bawah lisensi Apache 2; lisensi yang sama, semua yang ada di Yayasan Apache dilisensikan di bawah. Anda dapat mengambilnya dan melakukan apa yang Anda inginkan dengan itu dalam open source atau produk komersial. imgscalr sebenarnya sudah digunakan di sejumlah aplikasi web komersial dalam produksi.
Riyad Kalla
1
@ DavidParks Anda benar, imgscalr dimaksudkan untuk mengambil alih begitu Anda memiliki instance BufferedImage (data gambar yang diterjemahkan), bukan sebelumnya. Saya bahkan tidak ingin mempertimbangkan untuk mencoba melakukan decoder / encoders saya sendiri karena pipa-pipa itu telah lama dipercepat perangkat kerasnya oleh tim Java2D - mencoba untuk mengulang semua yang bekerja bebas bug dan efisien akan menjadi usaha yang sangat besar.
Riyad Kalla
1
@gstackoverflow imgscalr beroperasi pada instance BufferedImage mentah (data gambar yang didekodekan) - jadi sesuatu yang lain (biasanya pustaka ImageIO) perlu men-decode data gambar yang disandikan ke BufferedImage dan kemudian menyandikan ulang ke gambar baru setelah imgscalr selesai dioperasikan di atasnya - dengan kata lain "imgscalr tidak peduli dengan format file, Anda sudah mendekodekan gambar sebelum menyerahkannya ke imgscalr"
Riyad Kalla
1
ImgScalr hanya baik untuk manipulasi gambar dasar. Jika menyangkut pemuatan dan pemrosesan gambar. tidak memiliki kerumitan.
MarekM
31

Alternatif lain yang bagus: Marvin

Yusuf
sumber
9
Terima kasih banyak. Kamu menyelamatkan hariku! : D (PS: Saya bukan OP. Saya menemukan posting ini sambil googling dan percayalah, itu banyak membantu saya! (Akan membelikan Anda bir jika saya bertemu Anda suatu hari nanti.)).
missingfaktor
3
@missingfaktor sekarang aku berutang bir padamu. Pujian Anda terhadap Joseph juga menyelamatkan hari saya. Joseph, kamu mendapatkan bir juga ofc :)!
Filip Dupanović
3
URL itu tampaknya tidak ada lagi, tetapi marvinproject.sourceforge.net tampaknya menjadi URL baru.
Amos M. Carpenter
Oke, saya semacam berkewajiban untuk memberikan tampilan INI. =)
Marvo
Terlihat sangat bagus, akan mencobanya.
Ridcully
8

Pemrosesan baru tetapi sangat, sangat bagus.

fmsf
sumber
1
Saya sadar sedang memproses, tetapi apakah orang-orang benar-benar menggunakannya di, Saya ingin menjalankan transformasi X di perpustakaan saya dari jenis busana X jpeg?
Daniel Honig
Saya sudah menggunakannya dan tampaknya benar-benar kuat dan layak taruhan di
fmsf
2
Sebenarnya pustaka inti (yang dapat digunakan untuk fungsi embedding) adalah LGPL. Tetapi tidak ada yang bertanya apa lisensi itu. wiki.processing.org/w/…
Benjamin Atkin
5

Coba gunakan Catalano Framework .

Titik kunci:

  • Arsitektur seperti AForge.NET/Accord.NET.
  • Jalankan di kedua lingkungan dengan kode yang sama, desktop dan Android.
  • Berisi beberapa filter secara paralel.
  • Pengembangan dilakukan dengan penuh semangat.

Kerangka Catalano adalah kerangka kerja untuk komputasi ilmiah untuk Java dan Android. Proyek ini dimulai sebagai port awal dari banyak fitur kerangka kerja AForge.NET dan Accord.NET untuk .NET, tetapi terus berkembang dengan fitur-fitur yang lebih canggih yang sekarang dibagi di antara proyek-proyek tersebut.

Contoh:

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
Diego Catalano
sumber
6
The best framework in Java is Catalano Frameworksepertinya Anda mengiklankan produk Anda sendiri. Kerangka kerja Anda mungkin bagus, tetapi Anda harus mengungkapkan afiliasi Anda dengannya, seperti yang dinyatakan dalam FAQ .
Matthias Braun
@MatthiasBraun OK, saya setuju dengan Anda, saya tidak tahu tentang itu. Saya mengedit jawabannya.
Diego Catalano
1
Kerangka Catalano telah pindah ke github.com/DiegoCatalano/Catalano-Framework
HairOfTheDog
4

imo pendekatan terbaik adalah menggunakan GraphicsMagick Image Processing System dengan im4java sebagai antarmuka perintah-perintah untuk Java.

Ada banyak keuntungan dari GraphicsMagick, tetapi satu untuk semua:

  • GM digunakan untuk memproses miliaran file di situs foto terbesar di dunia (mis. Flickr dan Etsy).
kajo
sumber
itu; ini hanya pembungkus baris perintah - bukan perpustakaan ....
Kulpemovitz
3

http://im4java.sourceforge.net/ - jika Anda menjalankan linux mencari proses baru tidak mahal.

Amanjit Gill
sumber
Hati-hati karena kesalahan memori ...
Claes Mogren
garpu mahal. Itu bisa menggunakan banyak memori. Lihat kutipan orang tersebut dari sebuah artikel di bagian bawah coderanch.com/t/419196/java/java/there-any-way-execute-Linux (Artikel ini adalah: developers.sun.com/solaris/articles/subprocess/subprocess .html )
Desain Plaudit
@Plaudit checkout gm4java, ini menciptakan kumpulan proses GM dalam mode interaktif dan tidak perlu melakukan fork setiap kali untuk mengonversi gambar. kennethxu.blogspot.com/2013/04/...
Kenneth Xu
2

Untuk alat komersial, Anda mungkin ingin mencoba Snowbound.

http://www.snowbound.com/

Pengalaman saya dengan mereka agak tanggal, tetapi saya menemukan Java Imaging API mereka menjadi jauh lebih mudah digunakan daripada JAI dan jauh lebih cepat.

Dukungan pelanggan dan sampel kode mereka juga sangat bagus.

Clayton
sumber
2

Daftar perangkat lunak RoboRealm vision menyebutkan JHLabs dan NeatVision di antara banyak pustaka non-Jawa lainnya.

rics
sumber
1

Saya tidak dapat mengatakan bahwa itu adalah perpustakaan "terbaik", tetapi saya pikir Anda dapat mencoba ini: http://algart.net/java/AlgART/ Ini adalah perpustakaan Java open-source, mendukung array dan matriks "pintar" umum dengan elemen dari tipe yang berbeda (dari titik apung 1 bit hingga 64-bit), termasuk pemrosesan gambar 2D, 3D, dan multidimensi dan algoritma lainnya, bekerja dengan larik dan matriks. Sayangnya saat ini tidak cukup berisi demo dan contoh, tetapi, di sisi lain, ini berisi banyak JavaDocs. Itu terletak di dasar perangkat lunak komersial (SIMAGIS) selama beberapa tahun, tetapi sekarang open-source.

Daniel
sumber
2
Meskipun tautan ini dapat menjawab pertanyaan, lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini dan memberikan tautan untuk referensi. Jawaban hanya tautan dapat menjadi tidak valid jika halaman tertaut berubah.
Matthias
Anda benar, saya sudah mengedit komentar pertama.
Daniel