Thư viện / phương pháp xử lý hình ảnh java tốt nhất là gì? [đóng cửa]


244

Tôi đang sử dụng cả apis phương tiện truyền thông JAI và ImageMagick?

ImageMagick có một số vấn đề về khả năng mở rộng và JMagick dựa trên JNI cũng không hấp dẫn. JAI có kết quả chất lượng kém khi thực hiện thay đổi kích thước so với ImageMagick.

Có ai biết bất kỳ công cụ tuyệt vời nào hoặc nguồn mở hoặc thương mại là java gốc và cung cấp kết quả chất lượng cao không?


5
JMagick gần như không có tài liệu nào ngoại trừ javadocs. Tôi vừa mới dành hai giờ để tìm kiếm thứ gì đó khá dễ thực hiện.
Alex Ciminian

Thật. Tôi đã chọn chỉ cần ra khỏi quy trình và sử dụng ImageMagick bằng cách sử dụng apache exec như một phương tiện để quản lý quy trình. Điều này làm việc tốt. Tôi có thể đã đi xa đến mức xây dựng một máy chủ hình ảnh chỉ cho mục đích này. Thật khó để tìm thấy một cái gì đó với chất lượng và chức năng của ImageMagick.
Daniel Honig

158
Thật nực cười khi những câu hỏi như thế này lại bị đóng ngoài chủ đề. Hơn 100000 lượt xem, đây rõ ràng là một câu hỏi mà mọi người đang hỏi. Đôi khi mọi người không biết chính xác mọi thứ họ sẽ làm trước và sẽ đánh giá cao những phản hồi "có ý kiến" của người khác trên khuôn khổ chung tốt nhất. Quá nhiều điều độ hoành tráng trên SO!
dùng467257

12
Có gì sai nếu mọi người thảo luận về ưu và nhược điểm của các khía cạnh chính của lập trình Java? Đó không phải là những gì SO phải làm sao? IMHO, những câu hỏi như vậy nên được kiểm duyệt và duy trì cẩn thận để cung cấp một tài liệu tham khảo tốt cho các nhà phát triển bắt đầu từ chủ đề cụ thể.
Raúl

20
Vâng Kết quả hàng đầu trong Google cho java image processing librarynhưng đóng cửa ... như thường lệ. Kiểm duyệt là quá mức trên SO những ngày này.
Stijn de Witt

Câu trả lời:


88

ImageJ , tự hào là

chương trình xử lý ảnh thuần Java nhanh nhất thế giới

Nó có thể được sử dụng như một thư viện trong một ứng dụng khác. Kiến trúc của nó không xuất sắc, nhưng nó thực hiện các tác vụ xử lý ảnh cơ bản.


2
Tôi sử dụng ImageJ làm thư viện trong một số ứng dụng xử lý ảnh. Đó là một thư viện Java rất tốt. Nó cũng tích hợp độc đáo với Java2D, vì vậy bạn có thể trộn và kết hợp 2 khá dễ dàng.
hohonuuli

3
Vào thời điểm tôi sử dụng ImageJ, API của nó khá khó xử. Đây là một ứng dụng mà bạn có thể viết các plugin hơn là một thư viện. Và theo tôi nhớ, cố gắng phát triển GUI mới trong cơ sở mã AWT cũ đó là một nỗi đau.
Ivan

4
Tôi chỉ lãng phí nửa ngày để cố gắng thực hiện một vòng quay hình ảnh, tỷ lệ và cắt ảnh đơn giản. Đó là tài liệu năm 2019 và ImageJ không thể sử dụng được.
M. Leonhard

133

Tôi biết câu hỏi này khá cũ, nhưng khi phần mềm mới xuất hiện, sẽ giúp có được một số liên kết mới đến các dự án có thể thú vị cho mọi người.

imgscalr là thay đổi kích thước hình ảnh thuần Java (và các op đơn giản như đệm, cắt, xoay, làm sáng / làm mờ, v.v.) rất đơn giản để sử dụng - một lớp duy nhất bao gồm một tập hợp các hoạt động đồ họa đơn giản được định nghĩa là các phương thức tĩnh bạn vượt qua một hình ảnh và nhận lại một kết quả.

Ví dụ cơ bản nhất về việc sử dụng thư viện sẽ như thế này:

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

Và một cách sử dụng điển hình hơn để tạo hình thu nhỏ hình ảnh bằng cách sử dụng một vài điều chỉnh chất lượng và tương tự có thể trông như thế này:

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

Tất cả các hoạt động xử lý hình ảnh đều sử dụng đường ống Java2D thô (được tăng tốc phần cứng trên các nền tảng chính) và sẽ không gây ra nỗi đau khi gọi ra thông qua JNI như tranh chấp thư viện trong mã của bạn.

imgscalr cũng đã được triển khai trong các sản phẩm quy mô lớn ở một vài nơi - việc bao gồm lớp AsyncScalr làm cho nó trở thành một trình duyệt hoàn hảo cho mọi xử lý hình ảnh phía máy chủ.

Có rất nhiều điều chỉnh về chất lượng hình ảnh mà bạn có thể sử dụng để đánh đổi giữa tốc độ và chất lượng với chế độ ULTRA_QUALITY cao nhất mang lại kết quả thu nhỏ trông tốt hơn so với triển khai Lancoz3 của GIMP.


@Riyad Kalla có vẻ thú vị cảm ơn ... Nhưng tôi không hiểu nó có thể được sử dụng trong các dự án thương mại không?
dùng592704

2
@ user592704 Hoàn toàn, imgscalr được cấp phép theo giấy phép Apache 2; cùng một giấy phép, mọi thứ tại Quỹ Apache đều được cấp phép theo. Bạn có thể lấy nó và làm những gì bạn muốn với nó trong các sản phẩm thương mại hoặc nguồn mở. imgscalr thực sự đã được triển khai trong một số ứng dụng web thương mại trong sản xuất.
Riyad Kalla

1
@DavidParks Bạn đã đúng, imgscalr có nghĩa là tiếp quản một khi bạn có ví dụ BufferedImage (dữ liệu hình ảnh được giải mã), chứ không phải trước đó. Tôi thậm chí không muốn xem xét việc đi xuống con đường cố gắng thực hiện bộ giải mã / mã hóa của riêng mình vì các đường ống đó từ lâu đã được tăng tốc phần cứng dưới vỏ bọc của nhóm Java2D - cố gắng làm lại tất cả các công việc không có lỗi và hiệu quả sẽ là một cam kết mạnh mẽ.
Riyad Kalla

1
@gstackoverflow imgscalr hoạt động trên các phiên bản BufferedImage thô (dữ liệu hình ảnh được giải mã) - do đó, một cái gì đó khác (thường là thư viện ImageIO) cần giải mã dữ liệu hình ảnh được mã hóa thành BufferedImage và sau đó mã hóa lại thành hình ảnh mới sau khi imgscalr hoạt động xong trên đó - đặt một cách khác "imgscalr không quan tâm đến định dạng tệp, bạn đã giải mã hình ảnh trước khi đưa nó cho imgscalr"
Riyad Kalla

1
ImgScalr chỉ tốt cho thao tác hình ảnh cơ bản. Nếu nói đến tải hình ảnh và xử lý. nó thiếu sự phức tạp
MarekM

31

Một lựa chọn tốt khác: Marvin


9
Cảm ơn rất nhiều. Bạn đã cứu ngày của tôi! : D (PS: Tôi không phải là OP. Tôi đã xem bài đăng này trong khi googling và tin tưởng tôi, nó đã giúp tôi rất nhiều! (Sẽ mua cho bạn một cốc bia nếu tôi gặp bạn vào một ngày nào đó.)).
missingfaktor

3
@missingfaktor bây giờ tôi nợ bạn một cốc bia. Lời khen của bạn về Joseph cũng đã cứu cả ngày của tôi. Joseph, bạn nhận được một ly bia quá :)!
Filip Dupanović

3
URL đó dường như không còn tồn tại, nhưng marvinproject.sourceforge.net dường như là URL mới.
Amos M. Carpenter

Được rồi, tôi sắp xếp bắt buộc phải nhìn NÀY. =)
Marvo

Trông thực sự tốt, sẽ cho nó một thử.
Rực rỡ


8

Chế biến là mới nhưng rất, rất tốt.


1
Tôi biết về việc xử lý, nhưng mọi người có thực sự sử dụng nó trong, tôi muốn chạy X biến đổi trên thư viện thời trang X jpeg của tôi không?
Daniel Honig

Tôi đã sử dụng nó và dường như thực sự mạnh mẽ và đáng để đặt cược vào
fmsf

2
Trên thực tế, các thư viện cốt lõi (có thể được sử dụng để nhúng chức năng) là LGPL. Nhưng không ai hỏi giấy phép là gì. wiki. Xử lý.org / w / từ
Benjamin Atkin

5

Hãy thử sử dụng Catalano Framework .

Những điểm chính:

  • Kiến trúc như AForge.NET/Accord.NET.
  • Chạy trong cả hai môi trường có cùng mã, máy tính để bàn và Android.
  • Chứa nhiều bộ lọc song song.
  • Phát triển là trên hơi nước đầy đủ.

Khung Catalano là một khung công tác tính toán khoa học cho Java và Android. Dự án bắt đầu như một cổng ban đầu của nhiều tính năng của khung AForge.NET và Accord.NET cho .NET, nhưng đang phát triển đều đặn với các tính năng nâng cao hơn hiện đang được chia sẻ giữa các dự án đó.

Thí dụ:

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 FrameworkNghe có vẻ như bạn đang quảng cáo sản phẩm của riêng bạn. Khung của bạn có thể rất tuyệt, nhưng bạn nên tiết lộ mối liên hệ của mình với nó, như đã nêu trong các Câu hỏi thường gặp .
Matthias Braun

@MatthiasBraun OK, tôi đồng ý với bạn, tôi không biết về nó. Tôi chỉnh sửa câu trả lời.
Diego Catalano

1
Khung Catalano đã chuyển sang github.com/DiegoCirthano/Cirthano-Framework
HairOfTheDog

4

Cách tiếp cận tốt nhất là sử dụng Hệ thống xử lý ảnh GraphicsMagick với im4java làm giao diện comand-line cho Java.

Có rất nhiều lợi thế của GraphicsMagick, nhưng một ưu điểm cho tất cả:

  • GM được sử dụng để xử lý hàng tỷ tệp tại các trang ảnh lớn nhất thế giới (ví dụ Flickr và Etsy).

nó chỉ là một trình bao bọc dòng lệnh - không phải là một thư viện ....
Kulpemovitz 15/03/18

3

http://im4java.sourceforge.net/ - nếu bạn đang chạy linux, yêu cầu một quy trình mới không tốn kém.


Cảnh giác với các lỗi bộ nhớ mặc dù ...
Claes Mogren

rèn là đắt tiền. Nó có thể sử dụng rất nhiều bộ nhớ. Xem trích dẫn của một người từ một bài viết ở dưới cùng của coderanch.com/t/419196/java/java/there-any-way-execute-Linux (Bài viết là: developers.sun.com/solaris/articles/sub process / sub process .html )
Thiết kế Plaudit

@Plaudit kiểm tra gm4java, nó tạo ra một nhóm quy trình GM ở chế độ tương tác và không cần rẽ nhánh mỗi lần để chuyển đổi hình ảnh. kennethxu.blogspot.com/2013/04/ Mạnh
Kenneth Xu

2

Đối với các công cụ thương mại, bạn có thể muốn dùng thử Snowbound.

http://www.snowbound.com/

Trải nghiệm của tôi với họ có phần lỗi thời, nhưng tôi thấy API hình ảnh Java của họ dễ sử dụng hơn JAI rất nhiều và nhanh hơn rất nhiều.

Hỗ trợ khách hàng và mẫu mã của họ cũng rất tốt.



1

Tôi không thể nói rằng đó là thư viện "tốt nhất", nhưng tôi nghĩ bạn có thể thử điều này: http://algart.net/java/AlgART/ Đây là một thư viện Java mã nguồn mở, hỗ trợ các mảng và ma trận "thông minh" tổng quát với các phần tử thuộc các loại khác nhau (từ điểm nổi 1 bit đến 64 bit), bao gồm xử lý hình ảnh 2D, 3D và đa chiều và các thuật toán khác, làm việc với các mảng và ma trận. Thật không may, ngay bây giờ nó không đủ bản demo và ví dụ, nhưng mặt khác, nó chứa rất nhiều JavaDocs. Nó nằm trong cơ sở của phần mềm thương mại (SIMAGIS) trong nhiều năm, nhưng bây giờ nó là nguồn mở.


2
Mặc dù liên kết này có thể trả lời câu hỏi, tốt hơn là bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở nên không hợp lệ nếu trang được liên kết thay đổi.
Matthias

Bạn nói đúng, tôi đã chỉnh sửa bình luận đầu tiên.
Daniel
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.