编写意图
在百度上能够找到的都是七牛云的图床上传工具,但是七牛云现在申请图床空间需要拿手持身份证照片来认证,所以果断放弃了七牛云,于是找到了腾讯云的COS,免费额度就够用了。但是,缺点在于,每一个图片都要自己手动上传,没有像七牛云那样的智能上传工具,所以自己用Python编写一款。
更新说明
当前版本: V2.0 Beta
更新内容:
1. API接口信息从外部吸取(confing.conf)
2. 修复目录下无image目录报错
3. 生成EXE避免用户安装过多的第三方库
流程图
主要流程:
上传函数流程:
相关功能实现
将粘贴板的图片保存到本地
使用win32clipboard
1 | win32clipboard.OpenClipboard() |
但是直接将data写入bmp文件中,发现无法打开,百度以后找到解决办法(参考文章1),代码量很长,这里不附上了,简单说下它的问题:
可以看到,一个全屏截图竟然达到了3.96M ,腾讯云免费空间才50G , 要是上传这样的图片上去,我可吃不消啊。
使用PIL对图像处理
1 | from PIL import ImageGrab |
上传到COS并获取地址
腾讯COS SDK
腾讯对开发者提供了SDK,但是这个SDK只支持python2.6和python2.7,由于我的环境只有python3.6,所以没办法用了。腾讯云COS SDK
第三方支持python3的SDK库
本来想自己写,可是那个数字签名认证没写过,在网上找了找,还是看到了支持py3的第三方库了,直接用第三方库吧,方便。
第三方库地址:
https://github.com/imu-hupeng/cos-python3-sdk/
这个第三方库不是腾讯开发的,但是也是功能很齐全,例如上传文件实现:
1 | cos = cos_lib3.Cos(app_id, secret_id, |
输出结果是返回的json数组,里面包含了上传后的地址
将返回的图片地址复制到粘贴板
实现剪切板的写入
还是用的pywin32中的win32clipboard库,代码如下:
1 | def setText(aString): |
这里有一个坑,百度上百度到的代码第三行使用的是win32con.CF_TEXT,但是测试发现CF_TEXT只能写入首字母,比如http://baidu.com 只能写入h。
查阅相关资料以后,发现有一个CF_UNICODETEXT,测试可以写入完整字符串。
对图片地址处理
在写入粘贴板之前,对图片地址做一个处理,处理成markdown格式的,![](PicUrl)然后放入剪切板。
代码实现:
1 | json_data = sub(bucket.upload_file(real_file_path=file_name, file_name=name, dir_name=folder)) |
其中sub函数是将单引号替换成双引号的函数,因为该第三方库返回的json数组使用的是单引号,json.loads()不识别单引号。
sub函数代码:
1 | def sub(string): |
腾讯云COS的一处忽略
我发现复制到粘贴板的字符串都是http协议的,然而却防在markdown编辑器中却加载不到图片,看了下手动传的生成的地址,现在COS已经采用https协议了,所以还要对返回的地址做一个处理
1 | def sub_http(string): |
成品展示
使用展示
依赖的第三方库说明
win32con 和 win32clipboard :安装了pywin32即可使用
PIL :图像处理库
cos_lib3 : 腾讯云COS支持Python3的库,非官方库(github : https://github.com/imu-hupeng/cos-python3-sdk/)
httplib2 : cos_lib3中使用了,因此安装
安装库:
pip install pywin32
pip install PIL
cos_lib3 : 已经放在了同目录下进行引用,无需安装
pip install httplib2
使用说明
V1.0版本
在腾讯云的COS中申请API密钥,然后填写进去即可。
特别说明一下region:
cos地址与对应园区的关系
tj -- 华北(天津园区)
sh -- 华东(上海园区)
gz -- 华南(广州园区)
sgp -- 新加坡园区
bj -- 北京园区
官方只给出了前四个,可能现在更新出了北京园区,官方还没写上去吧。
V2.0 Beta版
监听界面:
上传图片:
配置文件:
app_id = 125*******0
secret_id = AKIDa1G*******************fHeslSu
secret_key = MSIs**********************dJYaR4U
region = bj
API信息获取请看V1.0版本的介绍。
项目地址
https://github.com/admintony/COSIntelligentUpload
参考文章
附录
另外一种操作粘贴板的方法:
1 | from Tkinter import Tk |