2012-04-24 22 views
14

मैं निम्न छवियूआरएल (जावा) से हो रही छवि

enter image description here

को पढ़ने के लिए कोशिश कर रहा हूँ लेकिन यह IIOException दिखा रहा है।

Image image = null; 
URL url = new URL("http://bks6.books.google.ca/books?id=5VTBuvfZDyoC&printsec=frontcover&img=1& zoom=5&edge=curl&source=gbs_api"); 
image = ImageIO.read(url); 
jXImageView1.setImage(image); 
+4

... और अपवाद है ...? – Marcelo

+0

javax.imageio.IIOException ... "यूआरएल से इनपुट स्ट्रीम नहीं मिल सकता!" –

+0

क्या आपने अपने फ़ायरवॉल में अपना एप्लिकेशन अवरुद्ध कर दिया है? – Tobi

उत्तर

7

वजह से है वहाँ अपने URL में एक space आप एक HTTP 400 (ग़लत अनुरोध) त्रुटि हो रही है। यदि आप इसे ठीक करते हैं (zoom पैरामीटर से पहले), तो आपको HTTP 400 त्रुटि (अनधिकृत) प्राप्त होगी। हो सकता है कि आपको किसी मान्यता प्राप्त ब्राउज़र के रूप में अपने डाउनलोड की पहचान करने के लिए कुछ HTTP शीर्षलेख की आवश्यकता हो ("उपयोगकर्ता-एजेंट" शीर्षलेख का उपयोग करें) या अतिरिक्त प्रमाणीकरण पैरामीटर।

उपयोगकर्ता-एजेंट उदाहरण के लिए, तो ImageIO.read(InputStream) कनेक्शन InputStream का उपयोग कर का उपयोग करें:

URLConnection connection = url.openConnection(); 
connection.setRequestProperty("User-Agent", "xxxxxx"); 

उपयोग जो कुछ के लिए xxxxxx

+0

स्पेस को हटाने का प्रयास करें बस गलती से है .. वैसे भी हेडर जानकारी कैसे जोड़ें? –

+2

मैंने एक उदाहरण जोड़ा। – JScoobyCed

+0

मुझे एक ही समस्या है, लेकिन जब मैं छवि छवि = ImageIO.read (url) जोड़ता हूं तो मुझे एक त्रुटि मिलती है - प्रतीक IO –

2

सीधे एक यूआरएल बुला एक छवि प्राप्त करने के लिए प्रमुख सुरक्षा मुद्दों के साथ चिंता का विषय हो सकता है:

यहाँ कोड है। आपको यह सुनिश्चित करने की आवश्यकता है कि आपके पास उस संसाधन तक पहुंचने के लिए पर्याप्त अधिकार हैं। हालांकि आप छवि फ़ाइल पढ़ने के लिए ByteOutputStream का उपयोग कर सकते हैं। यह एक उदाहरण है (इसका सिर्फ एक उदाहरण, आप अपने आवश्यकता के अनुसार आवश्यक परिवर्तन करने की जरूरत है।)

ByteArrayOutputStream bis = new ByteArrayOutputStream(); 
InputStream is = null; 
try { 
    is = url.openStream(); 
    byte[] bytebuff = new byte[4096]; 
    int n; 

    while ((n = is.read(bytebuff)) > 0) { 
    bis.write(bytebuff, 0, n); 
    } 
} 
1

जरूरत का प्रयास करें यह:

class ImageComponent extends JComponent { 
    private final BufferedImage img; 

    public ImageComponent(URL url) throws IOException { 
     img = ImageIO.read(url); 
     setPreferredSize(new Dimension(img.getWidth(), img.getHeight())); 

    } 
    @Override protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     g.drawImage(img, 0, 0, img.getWidth(), img.getHeight(), this); 

    } 
    public static void main(String[] args) throws Exception { 

    final URL lenna = 
     new URL("http://bks6.books.google.ca/books?id=5VTBuvfZDyoC&printsec=frontcover&img=1& zoom=5&edge=curl&source=gbs_api"); 

    final ImageComponent image = new ImageComponent(lenna); 

    JFrame frame = new JFrame("Test"); 
    frame.add(new JScrollPane(image)); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(400, 300); 
    frame.setVisible(true); 
    } 

}

5

इस प्रयास करें:

//urlPath = address of your picture on internet 
URL url = new URL("urlPath"); 
BufferedImage c = ImageIO.read(url); 
ImageIcon image = new ImageIcon(c); 
jXImageView1.setImage(image); 
+0

हल नहीं कर सकता है यदि url के पास कोई क्वेरी पैराम – geek

13

इस कोड मेरे लिए ठीक काम किया।

import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.net.URL; 

public class SaveImageFromUrl { 

public static void main(String[] args) throws Exception { 
    String imageUrl = "http://www.avajava.com/images/avajavalogo.jpg"; 
    String destinationFile = "image.jpg"; 

    saveImage(imageUrl, destinationFile); 
} 

public static void saveImage(String imageUrl, String destinationFile) throws IOException { 
    URL url = new URL(imageUrl); 
    InputStream is = url.openStream(); 
    OutputStream os = new FileOutputStream(destinationFile); 

    byte[] b = new byte[2048]; 
    int length; 

    while ((length = is.read(b)) != -1) { 
     os.write(b, 0, length); 
    } 

    is.close(); 
    os.close(); 
} 

} 
+0

है तो यह उचित काम नहीं करेगा। क्या कोई एपीआई है जो छवि को वापस लाएगा यदि मैं वेबसाइट लिंक प्रदान करता हूं? http://stackoverflow.com/questions/38612896/android-load- थंबनेल-from-website-url-using-glide-picasso – Zen

+1

JSoup लाइब्रेरी आज़माएं। यहां संदर्भ लिंक है http://stackoverflow.com/questions/12465586/how-can-i-download-an-image-using-jsoup –

+0

धन्यवाद! मेरी मदद की! –

संबंधित मुद्दे