使用PIL图像读取jpg文件的等效方法是什么?



使用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 ...

是纯像素数据。


希望你现在可以看到两者之间的区别,那么你想要做什么…

相关内容

最新更新