我有一張圖片(jpeg)。我只需使用 open('img.jpg', 'rb') 從中獲取位元組。例如,我將這些位元組發送給我的朋友。那么他可以通過哪種方式使用 Python 進行相反的操作——從影像中的位元組?如何解碼?
- 如果他知道格式的方式 - 例如JPEG。
- 如果他不知道格式的方式。有什么辦法嗎?
uj5u.com熱心網友回復:
使用 PIL 模塊。此處答案中的更多資訊:將影像位元組資料流解碼為 JPEG
from PIL import Image
from io import BytesIO
with open('img.jpg', 'rb') as f:
data = f.read()
# Load image from BytesIO
im = Image.open(BytesIO(data))
# Display image
im.show()
# Save the image to 'result.FORMAT', using the image format
im.save('result.{im_format}'.format(im_format=im.format))
uj5u.com熱心網友回復:
如果您不想使用外部庫,可以使用位元組簽名(即檔案的前幾個位元組)來確定影像壓縮型別。
以下是一些常見的影像格式。
img_types = {
b'\xFF\xD8\xFF\xDB': 'jpg',
b'\xFF\xD8\xFF\xE0': 'jpg',
b'\xFF\xD8\xFF\xEE': 'jpg',
b'\xFF\xD8\xFF\xE1': 'jpg',
b'\x47\x49\x46\x38\x37\x61': 'gif',
b'\x47\x49\x46\x38\x39\x61': 'gif',
b'\x42\x4D': 'bmp',
b'\x89\x50\x4E\x47\x0D\x0A\x1A\x0A': 'png'
}
with open('path/to/image', 'rb') as fp:
img_bytes = fp.read()
for k, v in img_types.items():
if img_bytes.startswith(k):
img_type = v
break
else:
img_type = None
uj5u.com熱心網友回復:
你檢查過這個問題和這個問題嗎?它們與您的情況非常相似。如果將它們轉換為位元組,影像的 AFAIK 原始格式也沒有任何區別。所以鏈接的問題/答案應該沒問題。但是,如果它們不起作用,請更新您的問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/475584.html
下一篇:使用ActivityResultContracts.GetContent()將影像保存到內部存盤。-(科特林/Java/Android)