我最近在使用 selenium
做一个网页自动截屏的服务, 保存的截图需要保存为 jpg 文件
有两个相关的 api
selenium/webdriver/remote/webdriver.py
def get_screenshot_as_png(self) -> bytes:
"""
Gets the screenshot of the current window as a binary data.
:Usage:
::
driver.get_screenshot_as_png()
"""
return b64decode(self.get_screenshot_as_base64().encode('ascii'))
def get_screenshot_as_base64(self) -> str:
"""
Gets the screenshot of the current window as a base64 encoded string
which is useful in embedded images in HTML.
:Usage:
::
driver.get_screenshot_as_base64()
"""
return self.execute(Command.SCREENSHOT)['value']
一个是 get_screenshot_as_png
,另一个是 get_screenshot_as_base64
get_screenshot_as_png
中也是调用了 get_screenshot_as_base64
我就有问题了,这里的 get_screenshot_as_png
就是对 get_screenshot_as_base64
的结果做了简单的 decode
和 encode
这样就得到 PNG
了?那我怎么的到 JPG
呢?
难道 get_screenshot_as_base64
返回的 base64 其实就是 PNG 编解码后的 base64?
我本来想的是,图片都是三维矩阵,只有在保存到硬盘的时候,才分 png
、jpg
这些,是这样的吗?
还是说因为 PNG 是无损的,所以简单的编解码就好了,JPG 要有损压缩,才需要后续特殊处理?
自己解决了
我的需求:我会获得 png 的 stream (type 为 bytes),我要把 png 上传到 oss,但是 png 太大了,就像转成 jpg 再上传到 oss 中
但是,简中互联网上的教程都是,教你怎么把『内存中的 png』 变成 『硬盘上的 jpg』
这是非常愚蠢的!
我需要的是:『内存中的 png』 变成 『内存中的 jpg』
所以,我写了下面的代码:
输出结果如下: