使用python 3.10.
我的问题是我读一个jpg文件作为二进制文件,我得到一个字节数组。我有以下代码:
from PIL import Image
def get_image_bytes_from_file(filename: str):
with open(filename, "rb") as f:
image_read = f.read()
return image_read
input_file = './image.jpg'
image = Image.open(input_file)
pil_bytes = image.tobytes()
normal_read_bytes = get_image_bytes_from_file(input_file)
print('hi')
我需要对pil_bytes
进行什么调用才能等于normal_read_bytesenter code here
我该怎么做?
当你这样做的时候:
with open('image.jpg', "rb") as f:
JPEG = f.read()
变量JPEG
将包含一个完整的JPEG图像:
- a图像起始标记,SOI (0xFF 0xD8)
- APP0标记,(0xFF 0xE0)与JFIF版本和水平和垂直的dpi
- 量化表和霍夫曼表
- 可能是EXIF数据,包括GPS纬度,经度,相机型号,相机型号,照片日期等。
- a开始帧标记,SOF0,每像素位数,图像宽度和高度,通道数,采样因子 <
- JPEG-compressed像素/gh>
- EOI,图像结束标记(0xFF 0xD9)
这是一个完整的,jpeg编码,压缩图像与一堆元数据。
当您这样做时,PIL将把JPEG数据解压缩为完全展开的内存表示形式,以便处理:
im = Image.open('image.jpg')
pixels = im.tobytes()
您的变量pixels
将仅包含图像的未压缩像素,以RGB顺序从图像的左上角开始。没有EXIF数据,没有日期,没有GPS,没有评论,没有相机制造,没有相机型号或镜头数据。它将始终具有完整的,未压缩的大小:
height in pixels * width width in pixels * 3 bytes
所以,如果你的图片的顶部是白色的,它将开始:
0xFF 0xFF 0xFF 0xFF ...
是纯像素数据。
希望你现在可以看到两者之间的区别,那么你想要做什么…