2009-09-08 8 views
15

मुझे अपने सर्वर पर एक दूरस्थ छवि (उदाहरण के लिए http://example.com/image.jpg) कॉपी करने की आवश्यकता है। क्या यह संभव है?मैं पाइथन में रिमोट छवि की प्रतिलिपि कैसे बना सकता हूं?

आप कैसे सत्यापित करते हैं कि यह वास्तव में एक छवि है?

उत्तर

31

डाउनलोड करने के लिए:

import urllib2 
img = urllib2.urlopen("http://example.com/image.jpg").read() 

सत्यापित करने के लिए PIL

import StringIO 
from PIL import Image 
try: 
    im = Image.open(StringIO.StringIO(img)) 
    im.verify() 
except Exception, e: 
    # The image is not valid 

उपयोग कर सकते हैं तो आप सिर्फ भले ही चित्र डेटा मान्य नहीं है यह एक छवि है सत्यापित करने के लिए करना चाहते हैं: आप imghdr

का उपयोग कर सकते हैं

विधि हेडर की जांच करती है और छवि प्रकार निर्धारित करती है। अगर छवि पहचानने योग्य नहीं है तो यह वापस नहीं आएगा।

5

डाउनलोडिंग सामान

import urllib 
url = "http://example.com/image.jpg" 
fname = "image.jpg" 
urllib.urlretrieve(url, fname) 

सत्यापन किया जा रहा है कि यह एक छवि कई तरीकों से किया जा सकता है। सबसे कठिन जांच पाइथन छवि लाइब्रेरी के साथ फ़ाइल खोल रही है और देखें कि क्या यह एक त्रुटि फेंकता है।

यदि आप डाउनलोड करने से पहले फ़ाइल प्रकार को देखना चाहते हैं, तो रिमोट सर्वर देता है।

import urllib 
url = "http://example.com/image.jpg" 
fname = "image.jpg" 
opener = urllib.urlopen(url) 
if opener.headers.maintype == 'image': 
    # you get the idea 
    open(fname, 'wb').write(opener.read()) 
2

यही बात httplib2 ...

from PIL import Image 
from StringIO import StringIO 
from httplib2 import Http 

# retrieve image 
http = Http() 
request, content = http.request('http://www.server.com/path/to/image.jpg') 
im = Image.open(StringIO(content)) 

# is it valid? 
try: 
    im.verify() 
except Exception: 
    pass # not valid 
0

नकल एक रिमोट छवि के संबंध में विचाराधीन के भाग के लिए, यहाँ एक जवाब this answer से प्रेरित है का उपयोग करते हुए:

import urllib2 
import shutil 

url = 'http://dummyimage.com/100' # returns a dynamically generated PNG 
local_file_name = 'dummy100x100.png' 

remote_file = urllib2.urlopen(url) 
with open(local_file_name, 'wb') as local_file: 
    shutil.copyfileobj(remote_file, local_file) 

ध्यान दें कि यह दृष्टिकोण किसी भी बाइनरी मीडिया प्रकार की दूरस्थ फ़ाइल की प्रतिलिपि बनाने के लिए काम करेगा।

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

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