首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多幅图片(字节)

问多幅图片(字节)
EN

Stack Overflow用户
提问于 2022-02-04 09:37:42
回答 1查看 232关注 0票数 1

我试图从BytesIO中保存一个Bytes对象中的多张图片。稍后,从字节到图片再次访问这些图片。但我当然对字节不太了解。是否有一种方法可以在一张图片之后放入缓冲区,然后它知道图片的结尾位置?客户端:

代码语言:javascript
复制
#cv2 Capture Frame
ret, frame = cls.__cap.read()
buf = BytesIO()
for i in range(10):
    Image.fromarray(frame).save(buf, format='JPEG')
    # Here the Logic for differentiating Pictures
body = buf.getvalue()
requests.post(url,data=body,headers={'content-type': 'application/x-image'})

网站侧:

代码语言:javascript
复制
images_as_bytes = BytesIO(flask.request.data)
for i in range(10):
    # Here the Logic for differentiating Pictures
    img = Image.open(images_as_bytes)
    frame = np.asarray(img)
    # process
EN

回答 1

Stack Overflow用户

发布于 2022-02-04 09:55:39

我不确定您所做的工作的合理性或有效性,但您也许可以利用以下事实:所有JPEG都以EOI标记结尾:

代码语言:javascript
复制
0xff 0xd9

它们以SOI标记开始,即:

代码语言:javascript
复制
0xff 0xd8

同样,PNG图像的开头是:

代码语言:javascript
复制
0x89 0x50 0x4e 0x47 0x0d 0x0a 0x1a 0x0a

并以以下方式结束:

代码语言:javascript
复制
0x49 0x45 0x4e 0x44 0xae 0x42 0x60 0x82

下面是一些完全未经测试的、相关的代码,可以让您了解如何分割2个级联的PNG图像:

代码语言:javascript
复制
#!/usr/bin/env python3

import mmap
import re

pattern = re.compile(rb'(\x89PNG\x0d\x0a\x1a\x0a.*?\x00\x00\x00\x00IEND\xAE\x42\x60\x82)', re.MULTILINE|re.DOTALL)

# I guess we could do 2 TIFFs just as easily, or JPEGs
with open('TwoConcatenatedPNGs.png', 'rb') as f:
    with mmap.mmap(f.fileno(), 0,
                   access=mmap.ACCESS_READ) as m:
        i = pattern.finditer(m)
        for p in i:
         print(p.span())

创建这样的测试文件:

代码语言:javascript
复制
cat IMAGE1.PNG IMAGE2.PNG > TwoConcatenatedPNGs.png

理解Python、regex和mmap的最佳链接。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70984157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档