Java में छवियों के साथ काम करना: आकार बदलना (resize) और क्रॉप करना (crop)
आधुनिक वेब और डेस्कटॉप Java विकास में, अक्सर प्रोग्रामेटिक रूप से छवियों को संसाधित करने की आवश्यकता होती है: उन्हें पूर्वावलोकन के लिए छोटा करना, अतिरिक्त किनारों को काटना या दिए गए अनुपात में फिट करना। मानक Java लाइब्रेरी (Java SE) में इन कार्यों के लिए कोई एकल उच्च-स्तरीय वर्ग नहीं है, लेकिन java.awt, java.awt.image और javax.imageio पैकेजों में उपकरणों का एक शक्तिशाली सेट मौजूद है। इस लेख में, हम विस्तार से समझेंगे कि Java के अंतर्निहित साधनों का उपयोग करके resize (आकार बदलना) और crop (क्रॉप) संचालन कैसे करें।
छवियों के साथ काम करने के लिए मुख्य वर्ग
कोड शुरू करने से पहले, आइए मुख्य वर्गों से परिचित हों:
javax.imageio.ImageIO– छवियों को पढ़ना और लिखना (PNG, JPEG, BMP, GIF आदि का समर्थन करता है)।java.awt.image.BufferedImage– पिक्सेल तक पहुँच के साथ रास्टर छवि।java.awt.Graphics2D– ड्राइंग (स्केलिंग, क्रॉपिंग, ओवरले) के लिए वर्ग।java.awt.geom.AffineTransform– सटीक स्केलिंग के लिए ट्रांसफ़ॉर्मेशन मैट्रिक्स।
1. छवि का आकार बदलना (Resize)
सबसे सामान्य तरीका मूल छवि को आवश्यक आयामों वाले नए कैनवास पर फिर से बनाना है। गुणवत्तापूर्ण परिणाम के लिए RenderingHints का उपयोग करें।
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 BufferedImage resize(BufferedImage original, int targetWidth, int targetHeight) { BufferedImage resized = new BufferedImage(targetWidth, targetHeight, BufferedImage.TYPE_INT_RGB); 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; }
public static void main(String[] args) throws IOException { File input = new File("input.jpg"); BufferedImage source = ImageIO.read(input);
// 300x200 तक छोटा करें BufferedImage output = resize(source, 300, 200); ImageIO.write(output, "jpg", new File("resized.jpg")); System.out.println("Resize completed!"); }}महत्वपूर्ण नोट्स:
- यदि
RenderingHintsसेट नहीं किया गया, तो परिणाम निम्न गुणवत्ता का होगा (पड़ोसी पिक्सेल)। - पारदर्शिता वाले PNG के लिए
BufferedImage.TYPE_INT_ARGBका उपयोग करें। - अनुपात स्वचालित रूप से संरक्षित नहीं होते – आवश्यकता होने पर मैन्युअल रूप से पहलू अनुपात की गणना करें।
2. पहलू अनुपात (Aspect Ratio) का संरक्षण
छवि को विकृत होने से बचाने के लिए, अनुपात बनाए रखते हुए नया आकार निकालें:
public static BufferedImage resizeKeepRatio(BufferedImage original, int maxWidth, int maxHeight) { int origWidth = original.getWidth(); int origHeight = original.getHeight();
double widthRatio = (double) maxWidth / origWidth; double heightRatio = (double) maxHeight / origHeight; double ratio = Math.min(widthRatio, heightRatio);
int newWidth = (int) (origWidth * ratio); int newHeight = (int) (origHeight * ratio);
return resize(original, newWidth, newHeight);}3. छवि क्रॉप करना (Crop)
Java में क्रॉपिंग getSubi विधि का उपयोग करके की जाती है।
पुस्तकालय में भी
Swift (iOS/macOS) के लिए लॉगिंग: सर्वश्रेष्ठ लाइब्रेरी और समाधान
Rust में Markdown के साथ काम करना: लाइब्रेरी और उपकरण
Go में PDF रिपोर्ट जनरेशन: लाइब्रेरीज़ का अवलोकन और कोड उदाहरण