最近想给 goss 加点料,就是省去截完图后,保存本地图片的步骤,而是直接从剪切板里获取图片并上传 Github,这样,如何从剪切板中获取图片就成了关键。

本来想着直接使用 pbcopypbpaste 命令组合,不过可惜的是它们只能适用于文本。

此时我们需要借助三方包 Pillow

安装

1
$ pip install pillow

获取并保存本地

1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: wxnacy([email protected])
# Description:

from PIL import ImageGrab
from PIL import Image

img = ImageGrab.grabclipboard()
if isinstance(img, Image.Image):
img.save('test.png', 'png')

截图并保存剪切板后,grabclipboard() 方法可以获取剪切板中的图片,为了防止出错,我们还要判断取出的数据是否 Image.Image 图片类型,随后调用 save() 方法保存本地即可。

获取并写入到流

不过我希望的不是保存到本地,而是直接写入到流中,再进行二次操作,此时需要借助 io 包,将图片保存到 io 流中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: wxnacy([email protected])
# Description:

from PIL import ImageGrab
from PIL import Image
import io

img = ImageGrab.grabclipboard()
img_bytes = io.BytesIO()
if isinstance(img, Image.Image):
# img.save('test.png', 'png')
img.save(img_bytes, 'png')
print(img_bytes.getvalue())

能拿到字节流就可以对其操作,在转换为其它格式,比如 base64,具体方法可以参考 Convert bytes to base64 HTML img tag

03-16 16:37