Tôi cần phải sao chép một hình ảnh từ xa (ví dụ http://example.com/image.jpg
) vào máy chủ của tôi. Điều này có thể không?Làm thế nào để sao chép một hình ảnh từ xa trong python?
Làm thế nào để bạn xác minh rằng đây thực sự là một hình ảnh?
Tôi cần phải sao chép một hình ảnh từ xa (ví dụ http://example.com/image.jpg
) vào máy chủ của tôi. Điều này có thể không?Làm thế nào để sao chép một hình ảnh từ xa trong python?
Làm thế nào để bạn xác minh rằng đây thực sự là một hình ảnh?
Để tải:
import urllib2
img = urllib2.urlopen("http://example.com/image.jpg").read()
Để xác minh có thể sử dụng PIL
import StringIO
from PIL import Image
try:
im = Image.open(StringIO.StringIO(img))
im.verify()
except Exception, e:
# The image is not valid
Nếu bạn chỉ muốn xác minh điều này là một hình ảnh ngay cả khi dữ liệu hình ảnh không hợp lệ: Bạn có thể sử dụng imghdr
import imghdr
imghdr.what('ignore', img)
Phương pháp kiểm tra tiêu đề và xác định loại hình ảnh. Nó sẽ trả về None nếu hình ảnh không thể nhận dạng được.
Downloading thứ
import urllib
url = "http://example.com/image.jpg"
fname = "image.jpg"
urllib.urlretrieve(url, fname)
Thẩm định rằng đó là một hình ảnh có thể được thực hiện bằng nhiều cách. Kiểm tra khó khăn nhất là mở tệp bằng Thư viện hình ảnh Python và xem liệu nó có phát ra lỗi hay không.
Nếu bạn muốn kiểm tra loại tệp trước khi tải xuống, hãy xem loại mime mà máy chủ từ xa cung cấp.
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())
điều Cùng sử dụng 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
Đối với phần của câu hỏi liên quan đến sao chép hình ảnh từ xa, đây là một câu trả lời lấy cảm hứng từ 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)
Lưu ý rằng cách tiếp cận này sẽ hoạt động để sao chép tệp từ xa của bất kỳ loại phương tiện nhị phân nào.