#coding: utf-8
import os,time,requests,hmac,json,photos,clipboard,workflow,editor,dialogs,base64,io
from hashlib import sha1
from PIL import Image,ExifTags
#选择图片
if select_mode == '0':
img_pick = photos.pick_asset(assets=photos.get_assets(),title='请选择需要插入的图片')
elif select_mode == '1':
img_pick = photos.get_assets()[-1]
else:
try:
img_pick = photos.get_screenshots_album().assets[-1]
except:
dialogs.hud_alert('相册内未发现屏幕截图片','error',1)
exit()
if not img_pick:
dialogs.hud_alert('未选择图片','error',1)
exit()
else:
pass
img = img_pick.get_image()
if img.format == 'GIF':
img_ext = 'GIF'
img_name_ext = 'gif'
img_data = img_pick.get_image_data()
else:
img_ext = 'JPEG'
img_name_ext = 'jpg'
try:
for orientation, value in ExifTags.TAGS.items():
if value == 'Orientation':
break
exif = dict(img._getexif().items())
rot_degrees = {3: 180, 6: 270, 8: 90}.get(exif[orientation], 0)
if rot_degrees:
img = img.rotate(rot_degrees, expand=True)
except (AttributeError, KeyError, IndexError):
pass
x = (int(img.size[0]*resize_set),int(img.size[1]*resize_set))
img = img.resize(x)
img_data = io.BytesIO()
img.save(img_data,format=img_ext,quality=quality_set)
#生成当前时间戳作为文件名前缀
t = int(time.time())
#定义上传后图片文件名
filename = '%s%s.%s'%(str(t),mark_str,img_name_ext)
#生成七牛上传凭证
scope = cloud+':'+filename
#超时设置
deadline = int(t)+3600
#编码凭证
data = {'scope':scope,'deadline':deadline}
json = json.dumps(data)
encode_json = base64.urlsafe_b64encode(json)
sign = hmac.new(sk,encode_json,sha1).digest()
encode_sign = base64.urlsafe_b64encode(sign)
uptoken = ak+':'+encode_sign+':'+encode_json
#发送上传请求
img_file = {'file':img_data.getvalue()}
data = {'token':uptoken,'key':filename}
r = requests.post(url,data=data,files=img_file)
#结果处理
img_data.close()
img_url = domain+'/'+filename
insert_text = '![%s](%s)'%(mark_str.replace('_',''),img_url)
if r.status_code == 200:
#在当前文档光标处以MD语法插入图片外链
editor.insert_text(insert_text)
#复制图片上传后外链地址到系统剪贴板
if copy_clip == True:
clipboard.set(img_url)
else:
pass
dialogs.hud_alert('上传成功','success',0.5)
else:
dialogs.hud_alert('上传失败,请检查设置参数!','error',0.5)
There are no comments yet.