使用 Snipaste 截图翻译

Snipaste 是我最喜欢的截图软件可惜没有截图翻译功能

依赖:Snipaste + Python + requests + pillow + clipboard + keyboard + chardet

百度翻译接口申请不再赘述,请参考自行有关文章

脚本

import os
import json
import random
from hashlib import md5

import requests
import keyboard
import clipboard
from PIL import ImageGrab


# 获取字符串md5
def _get_str_md5(string, encoding='utf-8'):
    return md5(string.encode(encoding)).hexdigest()

# 获取文件md5
def _get_file_md5():
	with open(photo, 'rb') as f:
		image = f.read()
		return md5(image).hexdigest()

# 等待键盘
def wait_keyboard():
    keyboard.wait(hotkey="Alt+T")

# 保存剪切板图像
def save_image():
    image = ImageGrab.grabclipboard()
    image.save(photo)

# 语种识别
def lang_discern():
    pass

# 发送请求
def send_request():
    url = 'http://api.fanyi.baidu.com/api/trans/sdk/picture'
    salt = random.randint(32768, 65536)
    sign = _get_str_md5(appid + _get_file_md5() + str(salt) + 'Methanol' + 'mac' + appkey)
    payload = {'from': fromLang, 'to': toLang, 'appid': appid, 'salt': salt, 'sign': sign, 'cuid': 'Methanol', 'mac': 'mac'}
    image = {'image': (os.path.basename(photo), open(photo, 'rb'), "multipart/form-data")}

    # 发送请求
    response = requests.post(url, params = payload, files = image)
    return response.json()

# 解析返回json
def parsing_json(json):
    if (json['error_code'] != '0'):
        _save_clipboard(json['error_code'] + ' : ' + json['error_msg'])
    else:
        result = ''
        for i in json["data"]["content"]:
            result = result + i["dst"] + '\n'
        _save_clipboard(result)      # 译文

# 字符串保存至剪切板
def _save_clipboard(string):
    clipboard.copy(string)

# 按压键盘
def press_keyboard():
    keyboard.press('F2') # F2 是作者 Snipaste 设置的贴图键,可以将剪切板的文字贴在屏幕上

if __name__ == '__main__':
    toLang = 'zh'
    fromLang = 'auto'
    appid = 'appid'
    appkey = 'appkey'
    photo = r'C:\Users\Methanol\Scripts\Public\screen_temp.png'

    while True:
        wait_keyboard()
        save_image()
        parsing_json(send_request())
        press_keyboard()
posted @ 2022-09-13 10:08  Methanol  阅读(1580)  评论(0)    收藏  举报