Làm cách nào để tạo tệp có thể chọn từ đối tượng Hình ảnh PIL để bạn có thể lưu những hình ảnh đó dưới dạng tệp đơn lẻ, sau đó có thể tải lên máy tính khác như máy chủ đang chạy PIL và bỏ ghim ở đó?Đối tượng hình ảnh có thể chọn
Trả lời
Bạn có thể chuyển đổi các đối tượng hình ảnh vào dữ liệu thì bạn có thể dưa nó:
image = {
'pixels': im.tostring(),
'size': im.size,
'mode': im.mode,
}
Và trở lại với một hình ảnh:
im = Image.fromstring(image['mode'], image['size'], image['pixels'])
LƯU Ý: Như astex
đề cập, nếu bạn sử dụng Gối (được đề xuất thay vì PIL), phương pháp tostring()
không còn được sử dụng cho tobytes()
. Tương tự như vậy với fromstring()
cho frombytes()
.
biến thể nhẹ của câu trả lời Gerald bằng cách sử dụng từ khóa args
tạo đối tượng pickleable
image = {'data': im.tostring(), 'size':im.size, 'mode':im.mode}
hoặc
image = dict(data=im.tostring(), size=im.size, mode=im.mode)
unpickle trở lại hình ảnh
im = Image.fromstring(**image)
Điều này có nghĩa là tôi không cần lưu trữ hình ảnh trong ứng dụng của mình? Tôi chỉ có thể sử dụng chuỗi mà họ serialize và chỉ hardcode nó bên trong ứng dụng khi tôi muốn sử dụng hình ảnh? – Ogen
Về mặt kỹ thuật, bạn có thể làm điều đó, nhưng tốt hơn nên giữ nó như một tệp thực ... trong trường hợp nó có thể được phiên bản cùng với mã của bạn, nhưng có hình ảnh được lưu giữ dưới dạng hình ảnh có nghĩa là bạn có thể dễ dàng xem chúng và biết phương tiện bạn đã lưu trữ. Nếu bạn lưu trữ hình ảnh dưới dạng mã, bạn sẽ tăng kích thước tệp nguồn của mình một cách giả tạo, khiến chúng trở nên quan trọng hơn để xem và tìm kiếm và khiến phương tiện của bạn khó quản lý hơn nếu bạn muốn xem và/hoặc thay đổi hình ảnh đó. – kungphu
'Image.tostring() 'hiện không được dùng nữa i n 'Pillow' có lợi cho' Image.tobytes() '. Vì lợi ích của hậu thế, nó có thể là tốt hơn để thay đổi ở trên (hoặc ít nhất là để lại một lưu ý). – astex