Không có gì trong stdlib để phân tích data:
uris ngoài việc rút ra path
. Nhưng không khó để phân tích phần còn lại. Ví dụ:
import urllib.parse
up = urllib.parse.urlparse[url]
head, data = up.path.split[',', 1]
bits = head.split[';']
mime_type = bits[0] if bits[0] else 'text/plain'
charset, b64 = 'ASCII', False
for bit in bits:
if bit.startswith['charset=']:
charset = bit[8:]
elif bit == 'base64':
b64 = True
# Do something smart with charset and b64 instead of assuming
plaindata = data.decode["base64"]
# Do something smart with mime_type
with open['spam.jpg', 'wb'] as f:
f.write[plaindata]
[Đối với Python 2.x, chỉ cần thay đổi urllib.parse
thành urlparse
.]
Lưu ý rằng tôi không sử dụng PIL chút nào. Bạn không cần PIL để lưu dữ liệu hình ảnh thô vào một tệp. Nếu bạn muốn tạo một đối tượng Image
từ nó trước, ví dụ: để thực hiện một số xử lý hậu kỳ, tất nhiên bạn có thể, nhưng nó không liên quan đến câu hỏi của bạn.
printimg_to_data [đường dẫn]
Ngoại trừfilenotfounderror:
In không tìm thấy! '
$ pip install python-datauri
sys.exit [2]
>>> from datauri import DataURI
>>> uri = DataURI['data:text/plain;charset=utf-8;base64,VGhlIHF1aWNrIGJyb3duIGZveCBqdW1wZWQgb3ZlciB0aGUgbGF6eSBkb2cu']
>>> uri.mimetype
'text/plain'
>>> uri.charset
'utf-8'
>>> uri.is_base64
True
>>> uri.data
b'The quick brown fox jumped over the lazy dog.'
Thao tác URI dữ liệu được thực hiện dễ dàng.DataURI.data will always return bytes, [which in Python 2 is the same as a string]. Use DataURI.text to get a string.
Điều này rất mạnh mẽ và sẽ từ chối một số URI dữ liệu hợp lệ. Tuy nhiên, nó đáp ứng trường hợp hữu ích nhất: Mimetype, Charset và Cờ Base64.
>>> from datauri import DataURI
>>> made = DataURI.make['text/plain', charset='us-ascii', base64=True, data='This is a message.']
>>> made
DataURI['data:text/plain;charset=us-ascii;base64,VGhpcyBpcyBhIG1lc3NhZ2Uu']
>>> made.data
b'This is a message.'
Cài đặt
Phân tích cú pháp
>>> from datauri import DataURI
>>> png_uri = DataURI.from_file['somefile.png']
>>> png_uri.mimetype
'image/png'
>>> png_uri.data
b'\x89PNG\r\n...'
Lưu ý rằng datauri.data sẽ luôn trả về byte, [trong Python 2 giống như một chuỗi]. Sử dụng DataUri.Text để có được một chuỗi.
Tạo từ một chuỗi
Tạo từ một tệp
Đây thực sự chỉ là một phương pháp tiện lợi.
Giấy phép
Mã này được phát hành theo Unlicense. | |
Tín dụng | |
Đây là một bản đóng gói lại của chính ý chính này được viết bởi Zachary Voase. | |
importbase64 base64 | |
Nhập khẩu mimetypes | |
Nhập khẩu os | |
Nhập khẩu sys | |
classfilenotfounderror [ngoại lệ]: FileNotFoundError[Exception]: | |
đi qua | |
demimg_to_data [đường dẫn]: img_to_data[path]: | |
"" "Chuyển đổi một tệp [được chỉ định bởi một đường dẫn] thành URI dữ liệu." "" | |
ifnotos.path.exists [đường dẫn]: not os.path.exists[path]: | |
RAISEFILENOTFOUNDROR FileNotFoundError | |
mime, _ = mimetypes.guess_type [đường dẫn], _ = mimetypes.guess_type[path] | |
withopen [đường dẫn, 'rb'] ASFP: open[path, 'rb'] as fp: | |
data = fp.read [] = fp.read[] | |
data64 = u ''. Tham gia [base64.encodestring [dữ liệu] .splitlines []] = u''.join[base64.encodestring[data].splitlines[]] | |
returnu'data:%s; base64,%s '%[mime, data64] u'data:%s;base64,%s' % [mime, data64] | |
defusage [argv]: usage[argv]: | |
print'Usage: %s ' %argv [0] 'Usage: %s ' % argv[0] | |
if__name __ == '__ main__': __name__ == '__main__': | |
thử:: | |
path = sys.argv [1] = sys.argv[1] | |
ngoại trừ Indindexerror: IndexError: | |
sử dụng [sys.argv][sys.argv] | |
sys.exit [1].exit[1] | |
thử:: | |
path = sys.argv [1] img_to_data[path] | |
ngoại trừ Indindexerror: FileNotFoundError: | |
sử dụng [sys.argv] 'File not found!' | |
sys.exit [1].exit[2] |