在 python 中编码部分图像
Encode part image in python
现在我想用 base64 编码部分图像,我做到了。例如,这是一张 1080x1920 的图像,但需要此图像的一部分。
Top:160, left:340, right:1024, bottom:650.
# first crop
im = Image.open(original)
region = im.crop((160, 340, 1024, 650))
clip_image = os.path.join(screenshot_dir, 'clip.png')
region.save(clip_image)
// then read
f = open(clip_image, 'rb')
ls_f = base64.b64encode(f.read())
f.close()
s = bytes.decode(ls_f)
在我看来,也许我不必保存调整大小的图像,我可以直接读取这张图像的一部分。如果是这样,程序可以 运行 更快,因为没有额外的 IO
操作。
您可以使用 tobytes
原始图像
This method returns the raw image data from the internal storage. For
compressed image data (e.g. PNG, JPEG) use save(), with a BytesIO
parameter for in-memory data.
im = Image.open(original)
region = im.crop((160, 340, 1024, 650))
ls_f = base64.b64encode(region.tobytes())
s = bytes.decode(ls_f)
如果是png或者jpg,需要使用BytesIO,大概是这样的:
im = Image.open(original)
region = im.crop((160, 340, 1024, 650))
with io.BytesIO() as temp_file:
region.save(temp_file)
ls_f = base64.b64encode(temp_file.getvalue())
s = bytes.decode(ls_f)
这取决于输入图像的格式。如果它没有被压缩,比如位图 bmp,它就是原始的。压缩格式的例子有 png、jpeg、gif。最简单的方法是查看扩展,或尝试一下。如果您在压缩图像上尝试第一种方法,它可能会引发异常,或者 return 图像失真
现在我想用 base64 编码部分图像,我做到了。例如,这是一张 1080x1920 的图像,但需要此图像的一部分。
Top:160, left:340, right:1024, bottom:650.
# first crop
im = Image.open(original)
region = im.crop((160, 340, 1024, 650))
clip_image = os.path.join(screenshot_dir, 'clip.png')
region.save(clip_image)
// then read
f = open(clip_image, 'rb')
ls_f = base64.b64encode(f.read())
f.close()
s = bytes.decode(ls_f)
在我看来,也许我不必保存调整大小的图像,我可以直接读取这张图像的一部分。如果是这样,程序可以 运行 更快,因为没有额外的 IO
操作。
您可以使用 tobytes
原始图像
This method returns the raw image data from the internal storage. For compressed image data (e.g. PNG, JPEG) use save(), with a BytesIO parameter for in-memory data.
im = Image.open(original)
region = im.crop((160, 340, 1024, 650))
ls_f = base64.b64encode(region.tobytes())
s = bytes.decode(ls_f)
如果是png或者jpg,需要使用BytesIO,大概是这样的:
im = Image.open(original)
region = im.crop((160, 340, 1024, 650))
with io.BytesIO() as temp_file:
region.save(temp_file)
ls_f = base64.b64encode(temp_file.getvalue())
s = bytes.decode(ls_f)
这取决于输入图像的格式。如果它没有被压缩,比如位图 bmp,它就是原始的。压缩格式的例子有 png、jpeg、gif。最简单的方法是查看扩展,或尝试一下。如果您在压缩图像上尝试第一种方法,它可能会引发异常,或者 return 图像失真