जावा में इमेज के साथ काम करना: लाइब्रेरी और व्यावहारिक उदाहरण
जावा रैस्टर इमेज के साथ काम करने के लिए शक्तिशाली अंतर्निहित टूल प्रदान करता है। इस लेख में हम मानक लाइब्रेरी javax.imageio, पैकेज java.awt.image और लोकप्रिय तृतीय-पक्ष लाइब्रेरी Thumbnailator पर विचार करेंगे। आप सीखेंगे कि इमेज को कैसे पढ़ें, सेव करें, स्केल करें, फ़िल्टर लागू करें और फ़ॉर्मेट बदलें।
1. मूल बातें: javax.imageio पैकेज और BufferedImage
मेमोरी में इमेज को प्रस्तुत करने के लिए मुख्य क्लास BufferedImage है। यह पिक्सेल प्राप्त करने और बदलने, विभिन्न रंग मॉडल (RGB, ARGB) और डेटा प्रकारों के साथ काम करने की अनुमति देता है।
फ़ाइल से इमेज पढ़ना
import javax.imageio.ImageIO;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;
public class ImageReadExample { public static void main(String[] args) { try { File inputFile = new File("input.jpg"); BufferedImage image = ImageIO.read(inputFile); System.out.println("चौड़ाई: " + image.getWidth()); System.out.println("ऊँचाई: " + image.getHeight()); System.out.println("प्रकार: " + image.getType()); } catch (IOException e) { e.printStackTrace(); } }}फ़ाइल में इमेज लिखना
File outputFile = new File("output.png");ImageIO.write(image, "png", outputFile); // फ़ॉर्मेट एक्सटेंशन द्वारा निर्धारित होता हैसमर्थित फ़ॉर्मेट: JPEG, PNG, BMP, WBMP, GIF (केवल पढ़ना)। पूरी सूची ImageIO.getReaderFormatNames() के माध्यम से प्राप्त की जा सकती है।
2. Java 2D के साथ स्केलिंग और रूपांतरण
पैकेज java.awt.Graphics2D गुणवत्तापूर्ण स्केलिंग, घुमाव, प्रतिबिंब और इमेज ओवरले करने की अनुमति देता है।
अनुपात बनाए रखते हुए स्केलिंग
import java.awt.Graphics2D;import java.awt.RenderingHints;import java.awt.image.BufferedImage;
public class ImageResizer { public static BufferedImage resize(BufferedImage original, int targetWidth, int targetHeight) { BufferedImage resized = new BufferedImage(targetWidth, targetHeight, original.getType()); Graphics2D g2d = resized.createGraphics(); // बेहतर गुणवत्ता के लिए स्मूथिंग चालू करें g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.drawImage(original, 0, 0, targetWidth, targetHeight, null); g2d.dispose(); return resized; }}इमेज को 90 डिग्री घुमाना
public static BufferedImage rotate(BufferedImage image, double angleDegrees) { double radians = Math.toRadians(angleDegrees); int w = image.getWidth(); int h = image.getHeight(); // घुमाव के बाद नया आकार int newW = (int) Math.abs(w * Math.cos(radians)) + (int) Math.abs(h * Math.sin(radians)); int newH = (int) Math.abs(h * Math.cos(radians)) + (int) Math.abs(w * Math.sin(radians)); BufferedImage rotated = new BufferedImage(newW, newH, BufferedImage.TYPE_INT_ARGB); Graphics2D g2d = rotated.createGraphics(); g2d.translate((newW - w) / 2.0, (newH - h) / 2.0); g2d.rotate(radians, w / 2.0, h / 2.0); g2d.drawImage(image, 0, 0, null); g2d.dispose(); return rotated;}3. फ़िल्टर लागू करना: ब्लर, कंट्रास्ट, ब्राइटनेस
फ़िल्टरिंग के लिए BufferedImageOp (पैकेज java.awt.image से) का उपयोग करें। सबसे उपयोगी कार्यान्वयन:
- \