एक फ़ाइल के रूप में एक बफ़रमैज को कैसे बचाएं


125

मैं इमेज का आकार बदलने के लिए imgscalr Java लाइब्रेरी का उपयोग कर रहा हूं ।

आकार बदलने () विधि कॉल का परिणाम बफ़रडैमेज ऑब्जेक्ट है। मैं अब इसे एक फ़ाइल (आमतौर पर .jpg) के रूप में सहेजना चाहता हूं।

मैं उसे कैसे कर सकता हूँ? मैं से जाना चाहता हूँ BufferedImage-> Fileलेकिन शायद यह सही तरीका नहीं है?

जवाबों:


238
File outputfile = new File("image.jpg");
ImageIO.write(bufferedImage, "jpg", outputfile);

7
इसके अलावा, सुनिश्चित करें कि outputfile मौजूद है। यदि यह नहीं है, तो (गलत तरीके से) एक NullPointerException
Cody S

9
एक कोशिश / पकड़ के साथ चारों ओर।
लो मोर्डा

पकड़ नहीं NullPointerException, उपयोगif (outputfile.exists())
Danon

24

आप क्लास के BufferedImageलिखने के तरीके का उपयोग करके किसी ऑब्जेक्ट को बचा सकते हैं javax.imageio.ImageIO। विधि का हस्ताक्षर इस प्रकार है:

public static boolean write(RenderedImage im, String formatName, File output) throws IOException

यहाँ imहै RenderedImageलिखा होना चाहिए, formatNameहै स्ट्रिंग प्रारूप का अनौपचारिक नाम से युक्त (उदाहरण के लिए png) और outputफ़ाइल वस्तु के लिए लिखा जा रहा है। पीएनजी फ़ाइल प्रारूप के लिए विधि का एक उदाहरण उपयोग नीचे दिखाया गया है:

ImageIO.write(image, "png", file);

20

उत्तर जावा डॉक्यूमेंटेशन के ट्यूटोरियल इन राइटिंग / सेविंग फॉरइमेज

Image I/Oवर्ग एक छवि को बचाने के लिए निम्न विधि प्रदान करता है:

static boolean ImageIO.write(RenderedImage im, String formatName, File output)  throws IOException

ट्यूटोरियल बताते हैं कि

बफ़रेडइमेज क्लास RenderedImage इंटरफ़ेस को लागू करता है।

इसलिए यह विधि में उपयोग करने में सक्षम है।

उदाहरण के लिए,

try {
    BufferedImage bi = getMyImage();  // retrieve image
    File outputfile = new File("saved.png");
    ImageIO.write(bi, "png", outputfile);
} catch (IOException e) {
    // handle exception
}

कोशिश करना ब्लॉक केwrite साथ कॉल को घेरना महत्वपूर्ण है क्योंकि, एपीआई के अनुसार , विधि "यदि लेखन के दौरान कोई त्रुटि होती है"IOException

यह भी समझाया गया है कि विधि का उद्देश्य, पैरामीटर, रिटर्न और थ्रो अधिक विवरण में हैं:

एक मनमाना ImageWriter का उपयोग करके एक छवि लिखता है जो किसी फ़ाइल को दिए गए प्रारूप का समर्थन करता है। यदि कोई फ़ाइल पहले से मौजूद है, तो उसकी सामग्री को छोड़ दिया जाता है।

पैरामीटर:

im - एक RenderedImage लिखा जाना है।

formatName - एक स्ट्रिंग प्रारूप के अनौपचारिक नाम के विपरीत।

आउटपुट - एक फाइल को लिखा जाना है।

यह दिखाता है:

यदि कोई उपयुक्त लेखक नहीं मिलता है तो गलत है।

फेंकता:

IllegalArgumentException - यदि कोई पैरामीटर अशक्त है।

IOException - अगर लिखने के दौरान कोई त्रुटि होती है।

हालांकि, formatNameअभी भी अस्पष्ट और अस्पष्ट लग सकता है; ट्यूटोरियल इसे थोड़ा साफ करता है:

ImageIO.write विधि उस कोड को कॉल करती है जो PNG को "PNG लेखक प्लग-इन" लिखता है। प्लग-इन शब्द का उपयोग छवि I / O के एक्स्टेंसिबल होने के बाद से किया जाता है और यह कई प्रकार के प्रारूपों का समर्थन कर सकता है।

लेकिन निम्न मानक छवि प्रारूप प्लगइन्स: JPEG, PNG, GIF, BMP और WBMP हमेशा मौजूद रहते हैं।

अधिकांश अनुप्रयोगों के लिए इनमें से एक मानक प्लगइन्स का उपयोग करना पर्याप्त है। उन्हें आसानी से उपलब्ध होने का फायदा है।

हालाँकि, आपके द्वारा उपयोग किए जा सकने वाले अतिरिक्त प्रारूप हैं:

छवि I / O वर्ग अतिरिक्त प्रारूपों के समर्थन में प्लग करने का एक तरीका प्रदान करता है जिसका उपयोग किया जा सकता है, और ऐसे कई प्लग-इन मौजूद हैं। यदि आप रुचि रखते हैं कि आपके सिस्टम में लोड या सहेजने के लिए कौन से फ़ाइल प्रारूप उपलब्ध हैं, तो आप GetReaderFormatNames और getWriterFormatNames ImageIO वर्ग के तरीकों का उपयोग कर सकते हैं। ये तरीके इस JRE में समर्थित सभी स्वरूपों को सूचीबद्ध करने वाले स्ट्रिंग की एक सरणी लौटाते हैं।

String writerNames[] = ImageIO.getWriterFormatNames();

नामों के दिए गए सरणी में कोई अतिरिक्त प्लग-इन शामिल होगा जो इंस्टॉल किए गए हैं और इनमें से किसी भी नाम का उपयोग एक छवि लेखक का चयन करने के लिए प्रारूप नाम के रूप में किया जा सकता है।

पूर्ण और व्यावहारिक उदाहरण के लिए, कोई ओरेकल के उदाहरण का उल्लेख कर सकता है SaveImage.java


9

एक java.awt.image.bufferedImage बनाएँ और फ़ाइल में सहेजें:

import java.io.*;
import java.awt.image.*;
import javax.imageio.*;
public class Main{
    public static void main(String args[]){
        try{
            BufferedImage img = new BufferedImage( 
                500, 500, BufferedImage.TYPE_INT_RGB );

            File f = new File("MyFile.png");
            int r = 5;
            int g = 25;
            int b = 255;
            int col = (r << 16) | (g << 8) | b;
            for(int x = 0; x < 500; x++){
                for(int y = 20; y < 300; y++){
                    img.setRGB(x, y, col);
                }
            }
            ImageIO.write(img, "PNG", f);
        }
        catch(Exception e){
            e.printStackTrace();
        }
    }
}

टिप्पणियाँ:

  1. MyFile.png नामक एक फ़ाइल बनाता है।
  2. छवि 500 ​​से 500 पिक्सल है।
  3. मौजूदा फ़ाइल को ओवरराइट करता है।
  4. छवि का रंग शीर्ष पर एक नीली पट्टी के साथ काला है।

1
  1. डाउनलोड करें और अपने प्रोजेक्ट्स पुस्तकालयों में imgscalr-lib-xxjar और imgscalr-lib-xx-javadoc.jar जोड़ें
  2. आपके कोड में:

    import static org.imgscalr.Scalr.*;
    
    public static BufferedImage resizeBufferedImage(BufferedImage image, Scalr.Method scalrMethod, Scalr.Mode scalrMode, int width, int height)  {
        BufferedImage bi = image;
        bi = resize( image, scalrMethod, scalrMode, width, height);
    return bi;
    }
    
    // Save image:
    ImageIO.write(Scalr.resize(etotBImage, 150), "jpg", new File(myDir));

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.