我有一个来自设备的数据流,我需要将其转换为jpeg然后base64对其进行编码以通过网络传输它。
到目前为止,我的Python 2.7代码如下所示:
from PIL import Image
import io
image = Image.open(io.BytesIO(self.imagebuffer)) # Image buffer contains the image data from the device.
image.save("test.jpg") # Writes the image to the disk in jpeg format
image.show() # Opens the image using the OS image view
我可以看到我有我想要的图像,可以用jpeg格式将其保存到磁盘上。
我不明白的是,我是否可以对来自image
对象的图像进行base64编码,或者是否需要先将其写入磁盘。如果可能的话,我想避免写它。
我的第二个问题是PIL
在这个过程中做了什么?它是否正在获取数据并将所需的特殊代码放入文件中以使其成为jpeg文件?我认为他的答案是是因为我可以将文件扩展名更改为.bmp
并且正确的文件写在磁盘上。
总而言之,是否可以从image
对象获取我的jpeg文件的base64编码版本,而无需先将其写入磁盘?
答案 0 :(得分:0)
一样简单:
import base64
encoded_string = base64.b64encode(image.read())
答案 1 :(得分:0)
试用此代码
图片base64编码格式
Python代码:
import os
import base64
image = 'test.jpg'
encoded_string = ""
with open(image, "rb") as image_file:
encoded_string = base64.b64encode(image_file.read())
file = encoded_string
答案 2 :(得分:0)
答案 3 :(得分:0)
此代码完成工作:
function GetVolumeInformation(
lpRootPathName: string; lpVolumeNameBuffer: string; nVolumeNameSize: DWORD;
var lpVolumeSerialNumber: DWORD; var lpMaximumComponentLength: DWORD;
var lpFileSystemFlags: DWORD; lpFileSystemNameBuffer: string;
nFileSystemNameSize: DWORD): BOOL;
external 'GetVolumeInformationW@kernel32.dll stdcall';
const
MAX_PATH = 260;
function FindVolumeName(const Drive: string): string;
var
FileSystemFlags: DWORD;
VolumeSerialNumber: DWORD;
MaximumComponentLength: DWORD;
begin
SetLength(Result, MAX_PATH)
if GetVolumeInformation(
Drive, Result, Length(Result), VolumeSerialNumber, MaximumComponentLength,
FileSystemFlags, '', 0) then
begin
SetLength(Result, Pos(#0, Result) - 1);
end
else
begin
RaiseException(SysErrorMessage(DLLGetLastError()));
end
end;