ไลบรารี / วิธีการประมวลผลภาพ java ที่ดีที่สุดคืออะไร? [ปิด]


245

ฉันใช้ทั้ง JAI media apis และ ImageMagick หรือไม่

ImageMagick มีปัญหาเรื่องความสามารถในการปรับขนาดได้และ JMagick ที่ใช้ JNI นั้นก็ไม่น่าสนใจเช่นกัน JAI มีผลลัพธ์คุณภาพต่ำเมื่อทำการปรับขนาดเมื่อเทียบกับ ImageMagick

ไม่มีใครรู้เกี่ยวกับเครื่องมือที่ยอดเยี่ยมไม่ว่าจะเป็นโอเพนซอร์ซหรือการค้าที่เป็นภาษาจาวาและให้ผลลัพธ์ที่มีคุณภาพสูง


5
JMagick แทบไม่มีเอกสารยกเว้น javadocs ฉันเพิ่งใช้เวลาสองชั่วโมงในการค้นหาสิ่งที่ควรจะทำง่าย
Alex Ciminian

จริง ฉันเลือกที่จะออกจากกระบวนการและใช้ ImageMagick โดยใช้ apache exec เป็นวิธีการจัดการกระบวนการ มันใช้งานได้ดี ฉันอาจจะไปไกลถึงการสร้างเซิร์ฟเวอร์ภาพเพียงเพื่อจุดประสงค์นี้ มันยากที่จะหาสิ่งที่มีคุณภาพและฟังก์ชั่นของ ImageMagick
Daniel Honig

158
มันไร้สาระที่คำถามเช่นนี้ถูกปิดเป็นนอกหัวข้อ การดูมากกว่า 100,000 ครั้งเป็นคำถามที่ผู้คนถามอย่างชัดเจน บางครั้งผู้คนไม่ทราบว่าทุกสิ่งที่พวกเขากำลังจะทำล่วงหน้าและจะขอบคุณผู้คนอื่น ๆ ที่ได้รับคำตอบ "ความเห็น" ในกรอบทั่วไปที่ดีที่สุด การดูแลที่ยิ่งใหญ่มากเกินไปใน SO!
user467257

12
เกิดอะไรขึ้นถ้าคนพูดถึงข้อดีข้อเสียของวิธีการเขียนโปรแกรม Java ไม่ควรทำอย่างนั้นเหรอ? IMHO คำถามดังกล่าวควรได้รับการกลั่นกรองและดูแลอย่างรอบคอบเพื่อให้การอ้างอิงที่ดีแก่นักพัฒนาที่เริ่มต้นใหม่ในหัวข้อนั้น ๆ
Raúl

20
ได้. ผลลัพธ์ยอดนิยมใน Google สำหรับjava image processing libraryแต่ปิด ... ตามปกติ การกลั่นกรองจะลงน้ำในวันนี้
Stijn de Witt

คำตอบ:


88

มีImageJซึ่งภูมิใจนำเสนอ

โปรแกรมประมวลผลภาพ Java ที่เร็วที่สุดในโลก

สามารถใช้เป็นห้องสมุดในแอปพลิเคชันอื่น สถาปัตยกรรมมันไม่ได้ยอดเยี่ยม แต่ทำหน้าที่ประมวลผลภาพขั้นพื้นฐาน


2
ฉันใช้ ImageJ เป็นห้องสมุดในแอพพลิเคชั่นประมวลผลรูปภาพจำนวนหนึ่ง มันเป็นห้องสมุด Java ที่ดีมาก มันรวมกันอย่างดีกับ Java2D ด้วยดังนั้นคุณสามารถผสมและจับคู่ 2 ได้อย่างง่ายดาย
hohonuuli

3
ตอนที่ฉันใช้ ImageJ API ของมันค่อนข้างงุ่มง่ามมันเป็นแอพพลิเคชั่นที่คุณสามารถเขียนปลั๊กอินมากกว่าไลบรารี่ และเท่าที่ฉันจำได้ว่าการพยายามพัฒนา GUI ใหม่ในฐานรหัส AWT เดิมนั้นเป็นเรื่องที่เจ็บปวด
Ivan

4
ฉันเสียเวลาเพียงครึ่งวันในการพยายามหมุนภาพปรับขนาดและครอบตัดง่ายๆ มันเป็นปี 2019 และเอกสารของ ImageJ นั้นไม่สามารถใช้งานได้
M. Leonhard

133

ฉันรู้ว่าคำถามนี้ค่อนข้างเก่า แต่เมื่อมีซอฟต์แวร์ใหม่ออกมามันจะช่วยให้ได้รับลิงค์ใหม่ไปยังโครงการที่น่าสนใจสำหรับคนทั่วไป

imgscalrเป็นภาพบริสุทธิ์ Java ปรับขนาด (และปฏิบัติการง่ายๆเช่น padding, การปลูกพืช, หมุน, ปรับความสว่าง / มืดลง ฯลฯ ) ห้องสมุดที่เป็นความเจ็บปวดที่ง่ายต่อการใช้ - ชั้นเดียวประกอบด้วยชุดของการดำเนินงานกราฟิกง่ายที่กำหนดไว้ทั้งหมดเป็นแบบคงที่วิธีการที่ คุณส่งภาพและรับผลลัพธ์กลับมา

ตัวอย่างพื้นฐานที่สุดของการใช้ไลบรารีจะมีลักษณะเช่นนี้:

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 ที่สูงที่สุดให้ผลลัพธ์ที่ปรับขนาดได้ซึ่งดูดีกว่าการใช้งาน Lancoz3 ของ GIMP


@Riyad Kalla ดูเหมือนว่าจะน่าสนใจขอบคุณ ... แต่ฉันไม่ได้รับมันสามารถใช้ในโครงการเชิงพาณิชย์ได้หรือไม่
user592704

2
@ user592704 อย่างแน่นอน imgscalr ได้รับอนุญาตภายใต้ใบอนุญาต Apache 2; ใบอนุญาตเดียวกันทุกอย่างที่ Apache Foundation ได้รับอนุญาตภายใต้ คุณสามารถนำไปใช้และทำในสิ่งที่คุณต้องการในโอเพ่นซอร์สหรือผลิตภัณฑ์เชิงพาณิชย์ imgscalr ถูกนำไปใช้จริงในเว็บแอพเพื่อการค้าจำนวนมาก
Riyad Kalla

1
@DavidParks คุณถูกต้องแล้ว imgscalr ตั้งใจที่จะเข้าควบคุมทันทีที่คุณมีอินสแตนซ์ BufferedImage (ถอดรหัสข้อมูลภาพ) ไม่ใช่ก่อนหน้า ฉันไม่ต้องการแม้แต่จะพิจารณาเส้นทางของการพยายามถอดรหัส / เข้ารหัสของตัวเองเนื่องจากท่อเหล่านั้นมีความยาวตั้งแต่ฮาร์ดแวร์เร่งความเร็วภายใต้การครอบคลุมโดยทีมงาน Java2D - พยายามทำซ้ำทั้งหมดที่ทำงานได้อย่างไร้ข้อบกพร่องและมีประสิทธิภาพ จะเป็นกิจการที่ยากลำบาก
Riyad Kalla

1
@gstackoverflow imgscalr ทำงานกับอินสแตนซ์ BufferedImage แบบดิบ (ถอดรหัสข้อมูลรูปภาพ) - ดังนั้นสิ่งอื่น (โดยทั่วไปคือไลบรารี ImageIO) จำเป็นต้องถอดรหัสข้อมูลรูปภาพที่เข้ารหัสไปยัง BufferedImage จากนั้นเข้ารหัสใหม่เป็นรูปภาพใหม่เมื่อ imgscalr ดำเนินการแล้ว ในนั้น - อีกวิธีหนึ่ง "imgscalr ไม่สนใจรูปแบบไฟล์คุณถอดรหัสภาพก่อนที่จะส่งไปที่ imgscalr"
Riyad Kalla

1
ImgScalr นั้นดีสำหรับการจัดการรูปภาพขั้นพื้นฐานเท่านั้น หากพูดถึงการโหลดภาพและการประมวลผล มันขาดความซับซ้อน
MarekM

31

อีกทางเลือกที่ดี: Marvin


9
ขอบคุณมาก. คุณบันทึกวันของฉัน! : D (PS: ฉันไม่ใช่ OP ฉันได้พบกับโพสต์นี้ในขณะที่ googling และเชื่อใจฉันมันช่วยฉันได้มาก! (จะซื้อเบียร์ให้คุณถ้าฉันเจอคุณซักวัน)
missingfaktor

3
@missingfaktor ตอนนี้ฉันเป็นหนี้เบียร์ให้คุณ การสรรเสริญของคุณกับโจเซฟเพียงแค่ช่วยวันของฉันด้วย โจเซฟคุณดื่มเบียร์ด้วยเช่นกัน :)!
Filip Dupanović

3
เห็นได้ชัดว่า URL นั้นไม่มีอยู่อีกต่อไป แต่marvinproject.sourceforge.netน่าจะเป็น URL ใหม่
Amos M. Carpenter

ตกลงฉันต้องจัดเรียงให้ดูนี้ =)
Marvo

ดูดีจริงๆจะลองทำดู
Ridcully


8

การประมวลผลเป็นของใหม่ แต่ดีมาก ๆ


1
ฉันรับรู้ถึงการประมวลผล แต่มีคนใช้มันจริง ๆ ในฉันต้องการเรียกใช้การแปลง X บนไลบรารีของแฟชั่นประเภท X jpeg หรือไม่
Daniel Honig

ฉันใช้มันและดูเหมือนว่ามีประสิทธิภาพและคุ้มค่าจริงๆพนันใน
FMSF

2
จริงๆแล้วห้องสมุดหลัก (ซึ่งสามารถใช้สำหรับการฝังฟังก์ชันการทำงาน) เป็น LGPL แต่ไม่มีใครถามว่าใบอนุญาตคืออะไร wiki.processing.org/w/…
Benjamin Atkin

5

พยายามที่จะใช้Catalano กรอบ

Keypoints:

  • สถาปัตยกรรมเช่น AForge.NET/Accord.NET
  • ทำงานในสภาพแวดล้อมทั้งสองด้วยรหัสเดสก์ท็อปและ Android เดียวกัน
  • มีตัวกรองหลายตัวพร้อมกัน
  • การพัฒนาอยู่บนไอน้ำเต็ม

Catalano Framework เป็นเฟรมเวิร์กสำหรับการคำนวณทางวิทยาศาสตร์สำหรับ Java และ Android โครงการเริ่มต้นเป็นพอร์ตเริ่มต้นของฟีเจอร์มากมายของเฟรมเวิร์ก AForge.NET และ Accord.NET สำหรับ. 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ดูเหมือนว่าคุณกำลังโฆษณาผลิตภัณฑ์ของคุณเอง กรอบการทำงานของคุณอาจจะดี แต่คุณควรจะเปิดเผยความเกี่ยวพันของคุณกับมันตามที่ระบุไว้ในคำถามที่พบบ่อย
Matthias Braun

@ MatiasBraun ตกลงฉันเห็นด้วยกับคุณฉันไม่รู้เกี่ยวกับมัน ฉันแก้ไขคำตอบ
Diego Catalano

1
Catalano Framework ได้ย้ายไปที่github.com/DiegoCatalano/Catalano-Framework
HairOfTheDog

4

imo วิธีที่ดีที่สุดคือการใช้ระบบประมวลผลภาพ GraphicsMagickกับim4javaเป็นอินเตอร์เฟส comand-line สำหรับ Java

มีข้อดีมากมายของ GraphicsMagick แต่สำหรับข้อดี:

  • จีเอ็มใช้ในการประมวลผลไฟล์หลายพันล้านไฟล์ที่ไซต์ภาพถ่ายที่ใหญ่ที่สุดในโลก (เช่น Flickr และ Etsy)

มันเป็นเพียงเสื้อคลุมบรรทัดคำสั่ง - ไม่ห้องสมุด ....
Kulpemovitz

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

@ ปรบมือชำระเงิน 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- และหลายมิติและอัลกอริธึมอื่น ๆ การทำงานกับอาร์เรย์และเมทริกซ์ น่าเสียดายที่ตอนนี้มันมีตัวอย่างและตัวอย่างไม่เพียงพอ แต่ในทางกลับกันมันมี JavaDocs จำนวนมาก มันวางอยู่ในฐานของซอฟต์แวร์เชิงพาณิชย์ (SIMAGIS) ในช่วงหลายปีที่ผ่านมา แต่ตอนนี้มันเป็นโอเพนซอร์ส


2
แม้ว่าลิงก์นี้อาจตอบคำถามได้ดีกว่าหากรวมส่วนสำคัญของคำตอบไว้ที่นี่และให้ลิงก์สำหรับการอ้างอิง คำตอบสำหรับลิงค์เท่านั้นอาจไม่ถูกต้องหากหน้าเว็บที่เชื่อมโยงมีการเปลี่ยนแปลง
Matthias

คุณพูดถูกฉันได้แก้ไขความคิดเห็นแรกแล้ว
Daniel
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.