Tôi đã tìm hiểu cách sử dụng PIL để nhận kích thước hình ảnh, nhưng không phải kích thước tệp theo byte. Tôi cần biết kích thước tệp để quyết định xem tệp có quá lớn để được tải lên cơ sở dữ liệu hay không.Cách lấy kích thước hình ảnh (byte) bằng PIL
Trả lời
Hãy thử:
import os
print os.stat('somefile.ext').st_size
hiện có cách nào để sử dụng PIL? –
Tại sao bạn cần sử dụng PIL? – thebjorn
để kiểm soát nếu nó là một hình ảnh không phải là một tiêu đề hình ảnh giả mạo, để làm cho một hồ sơ tải lên, và sau đó lưu nó vào cơ sở dữ liệu, do đó, nó là rõ ràng để thực hiện một phương pháp trong PIL để có được kích thước trong byte không? –
tôi là một chút muộn để điều này, nhưng tôi đã xem qua câu hỏi này 5 phút trước khi tìm kiếm như thế nào để có được kích thước của một hình ảnh PIL mà không lưu nó vào đĩa. Trong trường hợp bất cứ ai khác đi qua này, đây là một cách đơn giản để làm việc đó:
import StringIO
output = StringIO.StringIO()
image_output.save(output, 'PNG') #a format needs to be provided
contents = output.getvalue()
output.close()
image_filesize = len(contents)
Nếu bạn đã có hình ảnh trên hệ thống tập tin:
import os
os.path.getsize('path_to_file.jpg')`
Tuy nhiên, nếu bạn muốn để có được kích thước lưu của một hình ảnh đó là trong bộ nhớ và chưa được lưu vào hệ thống tập tin:
from io import BytesIO
img_file = BytesIO()
image.save(img_file, 'png')
image_file_size = img_file.tell()
phương pháp này sẽ tránh được nhiều lần đọc các dữ liệu hình ảnh như với StringIO. Lưu ý, tuy nhiên, nó sẽ sử dụng nhiều RAM hơn. Tất cả mọi thứ là một sự cân bằng. :-)
Chỉnh sửa: Tôi chỉ thấy nhận xét này từ OP:
cuối cùng, vấn đề là từ beginnig, nếu ai đó sẽ tải lên một bức tranh có 1 giga (giả mạo một) ông' sẽ giết máy chủ trước khi PIL sẽ thực hiện công cụ của nó, vì vậy tôi phải chặn yêu cầu trước khi nó kết thúc!
Đây là một câu hỏi rất khác và có thể được thực hiện tốt nhất tại máy chủ web. Đối với nginx, bạn có thể thêm cấu hình này vào cấu hình của mình:
http {
#...
client_max_body_size 100m; # or whatever size you want as your limit
#...
}
Phương pháp 'BytesIO' dường như đánh giá thấp kích thước so với kích thước từ bàn làm việc. Bất kỳ ý tưởng tại sao? – getup8
- 1. Cách giảm kích thước tệp hình ảnh bằng PIL
- 2. Cách lấy kích thước tài nguyên hình ảnh theo byte bằng PHP và GD?
- 3. PIL Image.resize() không thay đổi kích thước hình ảnh
- 4. Thay đổi kích thước hình ảnh trong PIL trong Tkinter
- 5. Thư viện hình ảnh Python (PIL), cách nén hình ảnh thành kích thước tệp mong muốn?
- 6. Lấy kích thước hình ảnh từ ByteArray
- 7. SCSS - Lấy kích thước hình ảnh
- 8. hình ảnh thay đổi kích thước bằng PIL thay đổi màu sắc mạnh
- 9. Python lấy ma trận hình ảnh PIL
- 10. Lấy kích thước hình ảnh bằng Javascript trước khi hình ảnh được tải đầy đủ
- 11. Python thay đổi kích thước gif động bằng PIL
- 12. Làm cách nào để thay đổi kích thước hình ảnh bằng PIL và duy trì tỷ lệ khung hình?
- 13. PIL cách quy mô kích thước văn bản có liên quan đến kích thước của hình ảnh
- 14. Cắt hình ảnh bằng PIL trong python
- 15. Bảo toàn dữ liệu exif của hình ảnh bằng PIL khi thay đổi kích thước (tạo hình thu nhỏ)
- 16. Thay đổi kích thước hình ảnh bằng django?
- 17. Thêm văn bản trên hình ảnh bằng PIL
- 18. Blackberry - cách đổi kích thước hình ảnh?
- 19. Thay đổi kích thước hình động GIF, hình ảnh động/hình ảnh, python
- 20. Lấy kích thước màn hình trong Java
- 21. Kích thước hình ảnh Carrierwave
- 22. Cách lấy Kích thước (KB) của UIImage
- 23. cách giảm kích thước hình ảnh lớn xuống kích thước hình thu nhỏ trong android
- 24. UIImageView: Thay đổi kích thước thành kích thước hình ảnh?
- 25. thay đổi kích thước hình ảnh bằng jquery
- 26. Android - Giảm kích thước tệp hình ảnh
- 27. Thay đổi kích thước hình ảnh dựa trên kích thước của DIV bằng CSS?
- 28. Thay đổi kích thước hình ảnh bằng Crop
- 29. Thay đổi kích thước hình ảnh trong Java để giảm kích thước hình ảnh
- 30. Lấy chiều cao hình ảnh bằng CarrierWave
Bạn có tạo hình ảnh hoặc hình ảnh được lưu trữ trên đĩa không? –
Sử dụng API hệ thống tệp để nhận kích thước tệp chứ không phải PIL. – wberry
hoặc 'len()', nếu bạn có nó trong bộ nhớ chứ không phải trên hệ thống tệp (có vẻ như bạn đang lưu trữ dưới dạng BLOB trong cơ sở dữ liệu.) – geoffspear