जावा में इमेज प्रोसेसिंग: लाइब्रेरी, टूल्स और कोड उदाहरण

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

जावा में इमेज प्रोसेसिंग: लाइब्रेरी, टूल्स और कोड उदाहरण

Java ग्राफ़िक्स के लिए शक्तिशाली बिल्ट-इन टूल्स और थर्ड-पार्टी लाइब्रेरीज़ की समृद्ध इकोसिस्टम प्रदान करता है। इस लेख में हम Java में इमेज लोड करने, प्रोसेस करने, बदलने और सेव करने के मुख्य तरीकों को कवर करेंगे — javax.imageio और java.awt जैसे स्टैंडर्ड क्लासेज़ से लेकर डेवलपर की ज़िंदगी आसान बनाने वाली लोकप्रिय लाइब्रेरीज़ तक।

1. स्टैंडर्ड टूल्स: javax.imageio और java.awt.image

Java में रास्टर इमेज के साथ बेसिक काम javax.imageio (लोड/सेव) और java.awt.image (पिक्सल मैनिपुलेशन) पैकेज पर आधारित है। मुख्य क्लास BufferedImage है, जो इमेज को RAM में स्टोर करता है।

इमेज लोड करना और सेव करना

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class ImageExample {
    public static void main(String[] args) throws IOException {
        // फ़ाइल से इमेज लोड करें
        BufferedImage image = ImageIO.read(new File("input.jpg"));
        System.out.println("चौड़ाई: " + image.getWidth() + ", ऊँचाई: " + image.getHeight());

        // दूसरे फ़ॉर्मेट में सेव करें
        ImageIO.write(image, "png", new File("output.png"));
    }
}

ImageIO फ़ॉर्मेट सपोर्ट करता है: JPEG, PNG, BMP, WBMP, GIF (केवल पढ़ना)। फ़ॉर्मेट लिस्ट बढ़ाने के लिए ImageIO प्लगइन्स (जैसे TwelveMonkeys) का उपयोग करें।

साइज़ बदलना (मैन्युअल तरीका)

import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;

public static BufferedImage resize(BufferedImage original, int newWidth, int newHeight) {
    BufferedImage resized = new BufferedImage(newWidth, newHeight, original.getType());
    Graphics2D g2d = resized.createGraphics();
    g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
    g2d.drawImage(original, 0, 0, newWidth, newHeight, null);
    g2d.dispose();
    return resized;
}

2. Java 2D API: ड्राइंग और फ़िल्टर

Graphics2D क्लास न केवल स्केलिंग बल्कि इफ़ेक्ट लगाने, घुमाने, क्रॉप करने, टेक्स्ट और ज्योमेट्रिक शेप जोड़ने की सुविधा देता है।

वॉटरमार्क लगाना

public static BufferedImage addWatermark(BufferedImage source, String text) {
    BufferedImage result = new BufferedImage(source.getWidth(), source.getHeight(), source.getType());
    Graphics2D g2d = result.createGraphics();
    g2d.drawImage(source, 0, 0, null);
    g2d.setColor(new Color(255, 255, 255, 128));
    g2d.setFont(new Font("Arial", Font.BOLD, 40));
    g2d.drawString(text, 20, source.getHeight() - 20);
    g2d.dispose();
    return result;
}

कलर फ़िल्टर लगाना (सेपिया)

public static BufferedImage applySepia(BufferedImage img) {
    int width = img.getWidth();
    int height = img.getHeight();
    BufferedImage sepia = new BufferedImage(width, height, img.getType());

    for (int y = 0; y < height; y++) {
        for (int x = 0; x < width; x++) {
            int rgb = img.getRGB(x, y);
            int r = (rgb >> 16) & 0xFF;
            int g = (rgb >> 8) & 0xFF;
            int b = rgb & 0xFF;

            int newR = (int) (0.393 * r + 0.769 * g + 0.189 * b);
            int newG = (int) (0.349 * r + 0.686 * g + 0.168 * b);
            int newB = (int) (0.272 * r + 0.534 * g + 0.131 * b);

            newR = Math.min(255, newR);
            newG = Math.min(255, newG);
            newB = Math.min(255, newB);

            int newPixel = (0xFF << 24) | (newR << 16) | (newG << 8) | newB;
            sepia.setRGB(x, y, newPixel);
        }
    }
    return sepia;
}

3. Thumbnailator — आसान थंबनेल जनरेशन

Thumbnailator लाइब्रेरी (Maven: net.coobird.thumbnailator) थंबनेल बनाने को बेहद सरल बनाती है। यह ImageIO और Java 2D को इंटरनली यूज़ करती है लेकिन कोड को बहुत छोटा कर देती है।

उदाहरण: एक लाइन में थंबनेल

Thumbnails.of("input.jpg")
    .size(200, 200)
    .toFile("thumbnail.jpg");

वॉटरमार्क के साथ थंबनेल

BufferedImage watermark = ImageIO.read(new File("watermark.png"));
Thumbnails.of("input.jpg")
    .size(400, 300)
    .watermark(Positions.BOTTOM_RIGHT, watermark, 0.5f)
    .toFile("output.jpg");

4. Apache Commons Imaging (पूर्व में Sanselan)

यह लाइब्रेरी ImageIO से ज़्यादा फ़ॉर्मेट सपोर्ट करती है और मेटाडेटा (EXIF) पढ़ने/लिखने में मददगार है।

EXIF डेटा पढ़ना

import org.apache.commons.imaging.Imaging;
import org.apache.commons.imaging.common.ImageMetadata;
import org.apache.commons.imaging.formats.jpeg.JpegImageMetadata;

ImageMetadata metadata = Imaging.getMetadata(new File("photo.jpg"));
if (metadata instanceof JpegImageMetadata) {
    JpegImageMetadata jpegMetadata = (JpegImageMetadata) metadata;
    System.out.println("EXIF: " + jpegMetadata.getEXIF());
}

निष्कर्ष

Java में इमेज प्रोसेसिंग के लिए कई विकल्प हैं: बेसिक काम के लिए ImageIO + BufferedImage, एडवांस्ड ग्राफ़िक्स के लिए Java 2D, थंबनेल के लिए Thumbnailator, और EXIF/मेटाडेटा के लिए Apache Commons Imaging। अपनी ज़रूरत के हिसाब से सही टूल चुनें!

अनुशंसाएँ