최고의 Java 이미지 처리 라이브러리 / 접근법은 무엇입니까? [닫은]


245

JAI 미디어 API와 ImageMagick을 모두 사용하고 있습니까?

ImageMagick에는 몇 가지 확장 성 문제가 있으며 JNI 기반 JMagick도 매력적이지 않습니다. JAI는 ImageMagick과 비교하여 크기 조정 작업을 수행 할 때 품질이 좋지 않습니다.

누구나 네이티브 자바이며 고품질의 결과를 제공하는 오픈 소스 또는 상업용 도구를 알고 있습니까?


5
JMagick에는 javadocs를 제외하고는 거의 문서가 없습니다. 방금 수행하기 쉬 웠던 것을 찾기 위해 두 시간을 보냈습니다.
— Alex Ciminian

과연. 방금 프로세스를 벗어나 프로세스 관리 수단으로 아파치 exec를 사용하여 ImageMagick을 사용하기로 결정했습니다. 이것은 잘 작동했습니다. 이 목적을 위해 이미지 서버를 구축하기까지했을 수도 있습니다. ImageMagick의 품질과 기능으로 무언가를 찾기가 어렵습니다.
— Daniel Honig

158
이와 같은 질문이 주제를 벗어난 것으로 마무리되는 것은 우스운 일입니다. 1 억 회 이상 시청 한 것은 사람들이 분명히 묻는 질문입니다. 때때로 사람들은 그들이하려고하는 모든 것을 정확하게 알지 못하며, 다른 사람들이 가장 일반적인 틀에 대한 "선입견"된 반응에 감사 할 것입니다. 너무 많은 장대 한 조정이 너무!
— user467257

12
사람들이 Java 프로그래밍의 주요 측면에 대한 장단점을 논의한다면 무엇이 문제입니까? 그렇게해야합니까? IMHO는 이러한 주제를 신중하게 검토하고 유지하여 특정 주제에 대해 새로 시작하는 개발자에게 좋은 참고 자료를 제공해야합니다.
— Raúl

20
예. Google의 최고 검색 결과는 java image processing library평소와 같이 닫혔습니다. 요즘에는 중재가 진행되고 있습니다.
— Stijn de Witt

답변:


88

있다 ImageJ에 가 될 자랑,

세계에서 가장 빠른 순수 Java 이미지 처리 프로그램

다른 응용 프로그램에서 라이브러리로 사용할 수 있습니다. 아키텍처는 훌륭하지 않지만 기본적인 이미지 처리 작업을 수행합니다.


2
ImageJ를 여러 이미지 처리 응용 프로그램의 라이브러리로 사용합니다. 매우 괜찮은 자바 라이브러리입니다. Java2D 와도 완벽하게 통합되므로 2를 쉽게 혼합하고 일치시킬 수 있습니다.
— hohonuuli

3
ImageJ를 사용했을 때 API는 어색했습니다. 라이브러리보다 플러그인을 작성할 수있는 응용 프로그램입니다. 그리고 내가 기억하는 한, 오래된 AWT 코드베이스에서 새로운 GUI를 개발하는 것은 고통 스러웠습니다.
— Ivan

4
간단한 이미지 회전, 크기 조정 및 자르기를 시도하면서 반나절을 낭비했습니다. 2019 년이며 ImageJ의 설명서를 사용할 수 없습니다.
— M. Leonhard

133

나는이 질문이 꽤 오래되었다는 것을 알고 있지만 새로운 소프트웨어가 나오면 사람들에게 흥미로운 프로젝트에 대한 새로운 링크를 얻는 데 도움이됩니다.

imgscalr 는 순전히 자바 이미지 크기 조정 (및 패딩, 자르기, 회전, 밝게 / 조명 등과 같은 간단한 연산) 라이브러리로 사용하기가 매우 간단합니다. 단일 클래스는 정적 메소드 로 정의 된 간단한 그래픽 작업 세트로 구성됩니다. 당신은 이미지를 전달하고 결과를 다시 얻을.

라이브러리를 사용하는 가장 기본적인 예는 다음과 같습니다.

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 모드를 사용하여 속도와 품질간에 균형을 맞추기 위해 사용할 수있는 이미지 품질에 대한 많은 조정이 있습니다.


@Riyad Kalla 그것은 흥미로운 감사로 보인다 ... 그러나 나는 그것이 상업적인 프로젝트에 사용될 수는 없습니까?
— user592704

2
@ user592704 절대적으로 imgscalr은 Apache 2 라이센스에 따라 라이센스가 부여됩니다. Apache Foundation의 모든 라이센스에 따라 동일한 라이센스가 부여됩니다. 오픈 소스 또는 상업용 제품으로 가져 가서 원하는 작업을 수행 할 수 있습니다. imgscalr은 실제로 프로덕션 환경의 여러 상용 웹 응용 프로그램에 이미 배포되어 있습니다.
— Riyad Kalla

1
@DavidParks 맞습니다. imgscalr은 이전이 아닌 해당 BufferedImage 인스턴스 (디코딩 된 이미지 데이터)가있는 경우 인계받습니다. Java2D 팀이 엄중하게 하드웨어 가속을 해왔 기 때문에 자체 디코더 / 인코더를 시도하는 길을 가고 싶지도 않았습니다. 버그없이 효율적으로 작동하는 모든 것을 다시 시도하려고합니다. 허풍스러운 사업이 될 것입니다.
— Riyad Kalla

1
@gstackoverflow imgscalr은 원시 BufferedImage 인스턴스 (디코딩 된 이미지 데이터)에서 작동하므로 인코딩 된 이미지 데이터를 BufferedImage로 디코딩 한 다음 imgscalr이 작동하면 새 이미지로 다시 인코딩해야합니다. "imgscalr은 파일 형식에 신경 쓰지 않습니다. 이미지를 imgscalr에 전달하기 전에 이미 이미지를 해독했습니다"
— Riyad Kalla

1
ImgScalr은 기본 이미지 조작에만 적합합니다. 이미지 로딩 및 처리와 관련하여 그것은 복잡성이 부족합니다.
— MarekM

31

또 다른 좋은 대안 : Marvin


9
고마워 당신은 내 하루를 구했다! : D (PS : 저는 OP가 아닙니다. 인터넷 검색을하면서이 게시물을 보았고 저를 믿었습니다. 많은 도움이되었습니다! (언젠가 만나면 맥주를 사겠습니다.)
— missingfaktor

3
@missingfaktor는 지금 당신에게 맥주를 빚지고 있습니다. 요셉에 대한 당신의 칭찬은 저의 하루도 구했습니다. 조셉, 맥주를 너무 많이 마셔서 :)!
— Filip Dupanović

3
해당 URL은 더 이상 존재하지 않지만 marvinproject.sourceforge.net 은 새로운 URL 인 것 같습니다.
— Amos M. Carpenter

좋아, 나는 이것 하나를 보일 의무가있다. =)
— Marvo

정말 좋아 보인다, 그것을 시도합니다.
— Ridcully


8

가공 은 새롭지 만 매우 좋습니다.


1
처리를 알고 있지만 실제로 사용하는 사람들은 X jpeg의 일종의 패션 라이브러리에서 X 변환을 실행하고 싶습니다.
— Daniel Honig

나는 그것을 사용하고 정말 강력하고 내기에 가치가 보인다
— fmsf

2
실제로 핵심 라이브러리 (임베딩 기능에 사용될 수 있음)는 LGPL입니다. 그러나 아무도 라이센스가 무엇인지 묻지 않았습니다. wiki.processing.org/w/…
— Benjamin Atkin

5

Catalano Framework를 사용해보십시오 .

키 포인트:

  • AForge.NET/Accord.NET과 같은 아키텍처
  • 동일한 코드, 데스크톱 및 Android를 사용하여 두 환경에서 모두 실행하십시오.
  • 여러 개의 필터를 병렬로 포함합니다.
  • 개발이 본격화되고 있습니다.

Catalano 프레임 워크는 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자신의 제품을 광고하는 것처럼 들립니다. 귀하의 프레임 워크는 훌륭 할 수 있지만 FAQ에 명시된 바와 같이 귀하의 제휴를 공개해야합니다 .
— Matthias Braun

@MatthiasBraun 좋아요, 나는 당신에 동의합니다, 나는 그것에 대해 몰랐습니다. 나는 대답을 편집했다.
— Diego Catalano


4

imo 최고의 접근 방식은 im4java 와 함께 GraphicsMagick 이미지 처리 시스템을 사용하는 것입니다 을 Java의 comand-line 인터페이스로 사용하는 것입니다.

GraphicsMagick에는 많은 장점이 있지만 모두를위한 하나의 장점이 있습니다.

  • GM은 세계 최대 사진 사이트 (예 : Flickr 및 Etsy)에서 수십억 개의 파일을 처리하는 데 사용됩니다.

그것은 단지 명령 줄 래퍼
— 일뿐입니다

3

http://im4java.sourceforge.net/-Linux를 실행하는 경우 새 프로세스를 처리하는 데 많은 비용이 들지 않습니다.


그래도 메모리 부족 오류를 조심하십시오 ...
— Claes Mogren

포크는 비싸다. 많은 메모리를 사용할 수 있습니다. coderanch.com/t/419196/java/java/there-any-way-execute-Linux 의 맨 아래 기사에서 사람의 인용문을 참조하십시오 (기사는 다음과 같습니다 : developers.sun.com/solaris/articles/subprocess/subprocess .html )
— Plaudit Design

@Plaudit checkout 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 라이브러리이며 2D, 3D 및 다차원 이미지 처리 및 기타 알고리즘을 포함한 다양한 유형의 요소 (1 비트에서 64 비트 부동 소수점까지)는 배열 및 행렬로 작업합니다. 불행히도 지금은 충분한 데모와 예제로 구성되어 있지 않지만 많은 JavaDoc이 포함되어 있습니다. 몇 년 동안 상용 소프트웨어 (SIMAGIS)의 기반이되었지만 현재는 오픈 소스입니다.


2
이 링크가 질문에 대한 답변을 제공 할 수 있지만 여기에 답변의 필수 부분을 포함시키고 참조 용 링크를 제공하는 것이 좋습니다. 링크 된 페이지가 변경되면 링크 전용 답변이 유효하지 않을 수 있습니다.
— Matthias

당신 말이 맞아요, 첫 번째 의견을 편집했습니다.
— Daniel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.