javascript - 从 python 的枕头模块生成的字节显示 img
问题描述
我使用枕头模块用 python 读取 jpg 图像:
from PIL import Image
img = Image.open('./test.jpg')
bytes = img.tobytes()
如果我打印bytes
我会得到这样的东西:
print(f'{bytes}')
# b'\xbe\xb0i\xb1\xa4^\xb1\xaad\xab\xa7`\xc2\xc0v\x96\x91Oj_2\xb7...
然后我将此“字节字符串”发送给我js
以显示它:
var b64imgData = btoa(bytes); // bytes is the 'bytes string' show upper
var img = new Image();
img.src = "data:image/jpg;base64," + b64imgData;
$('#imgCtn').append(img);
遗憾的是,最终的图像源似乎无效,因为我得到了无效的图像图标而不是我的图像test.jpg
。
有人知道问题出在哪里吗?
编辑1:
正如@cubrr提到的,不要img.tobytes()
对 jpg 文件使用方法。所以对于python代码,请使用这个:
from PIL import Image
img = Image.open('./test.jpg')
imageBytes = io.BytesIO()
img.save(imageBytes, format='JPEG')
bytes = imageBytes.getvalue()
解决方案
从枕头的文档中:
Image.tobytes(encoder_name='raw', *args)
...
警告:此方法从内部存储返回原始图像数据。对于压缩图像数据(例如 PNG、JPEG),请使用 save(),并为内存中的数据使用 BytesIO 参数。
所以尝试使用save
来获取 JPG 字节而不是原始内部图像数据:
img = Image.open('./test.jpg')
imageBytes = io.BytesIO()
img.save(imageBytes, format='JPEG')
bytes = imageBytes.getvalue()
如果仍然不起作用,请详细说明“将此字节字符串发送到我的 js”的含义。您如何发送和接收它(请提供代码)?
推荐阅读
- java - 在java中使用文件分隔符读取文件
- php - 如何在 PHP 7.2 中使用 Mockery 进行单元测试和模拟 Eloquent 查询
- android - 如何防止列表视图自动刷新?
- javascript - 无法执行 javascript new 函数
- sql-server - T-SQL 触发器 - 从插入中删除和错误
- ios - iOS 应用程序的公证审核流程 | WWDC
- coldfusion - 使用 Coldfusion 构建邮政编码邻近搜索
- php - SQL 错误:mysqli_stmt::bind_param():类型定义字符串中的元素数与绑定变量数不匹配
- ios - 展开 segue 工作不正确
- java - 流式传输迭代器与 forEachRemaining