जावा में इमेज प्रोसेसिंग: लाइब्रेरी, टूल्स और कोड उदाहरण
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। अपनी ज़रूरत के हिसाब से सही टूल चुनें!