العمل مع الصور في Java: نظرة شاملة على المكتبات والأدوات
توفر Java أدوات قوية للعمل مع الصور النقطية - بدءًا من التحميل والحفظ البسيط وصولاً إلى المعالجة المعقدة باستخدام المرشحات والشبكات العصبية. في هذه المقالة، سنستعرض ثلاثة مناهج رئيسية: المكتبة المدمجة Java 2D، والمكتبة المتخصصة ImageJ، والمعيار الصناعي OpenCV. ستتعلم كيفية اختيار الأداة المناسبة وسترى أمثلة عملية للكود.
1. المكتبة المدمجة Java 2D (javax.imageio, java.awt)
Java 2D هي جزء من المكتبة القياسية لـ Java (JDK). لا تتطلب تثبيت تبعيات إضافية وهي مثالية للعمليات الأساسية: التحميل، تغيير الحجم، القص، إضافة النص، والمرشحات البسيطة.
الفئات الرئيسية:
javax.imageio.ImageIO- قراءة وكتابة الصور (PNG, JPEG, BMP, GIF, WBMP).java.awt.image.BufferedImage- تمثيل الصورة في الذاكرة مع الوصول إلى البكسلات.java.awt.Graphics2D- سياق الرسم (التحجيم، التدوير، التراكب).java.awt.image.BufferedImageOp- واجهة للمرشحات (التمويه، التباين، تصحيح الألوان).
مثال 1: التحميل، تغيير الحجم، والحفظ
import javax.imageio.ImageIO;import java.awt.*;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;
public class ImageResizer { public static void main(String[] args) throws IOException { // تحميل الصورة الأصلية BufferedImage original = ImageIO.read(new File("input.jpg"));
// الأبعاد الجديدة (مثلاً، التصغير إلى 300x200) int newWidth = 300; int newHeight = 200;
// إنشاء صورة جديدة بالأبعاد المطلوبة BufferedImage resized = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB); Graphics2D g2d = resized.createGraphics();
// رسم الصورة الأصلية مع التحجيم g2d.drawImage(original, 0, 0, newWidth, newHeight, null); g2d.dispose();
// حفظ النتيجة ImageIO.write(resized, "jpg", new File("output.jpg")); System.out.println("تم! تم تغيير الحجم."); }}مثال 2: تطبيق مرشح مدمج (التمويه)
import javax.imageio.ImageIO;import java.awt.image.BufferedImage;import java.awt.image.ConvolveOp;import java.awt.image.Kernel;import java.io.File;
public class BlurFilter { public static void main(String[] args) throws Exception { BufferedImage img = ImageIO.read(new File("input.jpg"));
// نواة التمويه 3x3 (box blur) float[] blurKernel = { 1f/9f, 1f/9f, 1f/9f, 1f/9f, 1f/9f, 1f/9f, 1f/9f, 1f/9f, 1f/9f }; Kernel kernel = new Kernel(3, 3, blurKernel); ConvolveOp convolve = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null); BufferedImage blurred = convolve.filter(img, null);
ImageIO.write(blurred, "jpg", new File("blurred.jpg")); }}2. مكتبة ImageJ - للصور العلمية والطبية
ImageJ هي أداة شائعة لمعالجة الصور، مكتوبة أصلاً بلغة Java. توفر مئات الإضافات الجاهزة، والماكرو، وAPI قوي. مناسبة تماماً لتحليل المجهر، وصور الأقمار الصناعية، وأي مهام تتطلب إحصائيات عن البكسلات.
الإضافة (Maven):
<dependency> <groupId>net.imagej</groupId> <artifactId>ij</artifactId> <version>1.53t</version></dependency>مثال: تحليل الرسم البياني والمعالجة بالعتبة
import ij.IJ;import ij.ImagePlus;import ij.