최고의 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.