MarkdownPicPicker - Markdown图片上传助手

项目介绍

MarkdownPicPicker 是一个Markdown写作辅助工具。它能将剪贴板中的图片上传到网络图床中,并将markdown格式的图片链接(![](<图片地址>))复制到剪贴板中。

项目地址:https://github.com/kingname/MarkdownPicPicker

功能介绍

第0.1版有以下功能:

  1. 使用七牛云作为图床。
  2. 将图片保存在本地
  3. 图片上传成功后将Markdown格式的图片地址保存到剪贴板中
  4. 全局监听键盘(默认不开启)

使用方法

配置

以下部分需要做对应的修改:

METHOD = 'bat' #设定程序的运行方式,bat为使用bat文件触发,pyHook为全局键盘监听方式
PICTURE_FOLDER = 'pic' #截图的本地保存文件夹,可以根据实际情况修改。
PICTURE_SUFFIX = 'png' #截图的保存格式,可以选择bmp或者png

#以下两行来自于七牛云
ACCESS_KEY = 'Q6sS422O05Aw34523M3FqCcCpF36tqvyQ75Zvzw' 
SECRET_KEY = '6QtAqqTxoSxZP-25643hhxPLX2CCmoOaB2aLObM'

CONTAINER_NAME = 'picturebed' #七牛云的图片储存位置
URL = 'http://7sbpmp.com1.z0.glb.clouddn.com/{}' #七牛云分配的默认域名

SHORT_KEY_ONE = 'Lwin' #快捷键第一个按键
SHORT_KEY_TWO = 'C' #快捷键第二个按键

其中ACCESS_KEYSECRET_KEY 可以在七牛云的控制面板中看到,如图:

CONTAINER_NAME 为下图所示内容:

SHORT_KEY_ONESHORT_KEY_TWO 为快捷键的两个按键,默认为左侧windows徽标键(Lwin) 和 字母C

使用

将程序配置好以后运行,创建一个批处理文件markdownpicpicker.bat, 其内容如下:

@echo off
cmd /k "G:\github\MarkdownPicPicker\venv\Scripts\activate & cd /d G:\github\MarkdownPicPicker & python MarkdownPicPicker.py & deactivate & exit"

路径请根据实际情况修改。

由于我使用了virtualenv, 所以需要在批处理中进入virtualenv的环境才能正常运行程序。对于将requirements.txt里面包含的库直接安装在全局的情况,bat 可以简化:

@echo off
cmd /k "cd /d <MarkdownPicPicker.py脚本所在路径> & python MarkdownPicPicker.py & exit"

然后右键选择批处理,发送到桌面快捷方式。接着右键快捷方式,属性,在“快捷键” 这一栏按下字母Q,它将自动填充为 Ctrl + Alt + Q, 确定。

只需要首先使用QQ截图或者其他截图工具将图片保存到剪贴板中,然后按下设定好的快捷键即可。Markdown格式的图片链接就已经保存到剪贴板中了。在需要使用的地方直接粘贴。

不过这样设定的快捷键,按下以后会有大概一秒钟的延迟。推荐大家使用AutoHotKey来触发这个bat文件。

说明

Pillow bug修正

本程序使用了Pillow库中的 ImageGrab.grabclipboard() 方法来获取剪贴板中的数据,但是由于这个方法有一个bug, 导致可能会爆以下错误:

Unsupported BMP bitfields layout

这个问题从Pillow 2.8.0开始,一直到3.2.0都没有被官方解决。目前有一个间接的解决办法。 请打开Python安装目录下的\Lib\site-packages\PIL\BmpImagePlugin.py文件,将以下代码:

if file_info['bits'] in SUPPORTED:
    if file_info['bits'] == 32 and file_info['rgba_mask'] in SUPPORTED[file_info['bits']]:
        raw_mode = MASK_MODES[(file_info['bits'], file_info['rgba_mask'])]
        self.mode = "RGBA" if raw_mode in ("BGRA",) else self.mode
    elif file_info['bits'] in (24, 16) and file_info['rgb_mask'] in SUPPORTED[file_info['bits']]:
        raw_mode = MASK_MODES[(file_info['bits'], file_info['rgb_mask'])]
    else:
        raise IOError("Unsupported BMP bitfields layout")
else:
    raise IOError("Unsupported BMP bitfields layout")

修改为:

if file_info['bits'] in SUPPORTED:
    if file_info['bits'] == 32 and file_info['rgba_mask'] in SUPPORTED[file_info['bits']]:
        raw_mode = MASK_MODES[(file_info['bits'], file_info['rgba_mask'])]
        self.mode = "RGBA" if raw_mode in ("BGRA",) else self.mode
    elif file_info['bits'] in (24, 16) and file_info['rgb_mask'] in SUPPORTED[file_info['bits']]:
        raw_mode = MASK_MODES[(file_info['bits'], file_info['rgb_mask'])]
    '''新增内容开始'''
    elif file_info['bits'] == 32 and file_info['rgb_mask'] == (0xff0000, 0xff00, 0xff):
        pass
    '''新增内容结束'''
    else:
        raise IOError("Unsupported BMP bitfields layout")
else:
    raise IOError("Unsupported BMP bitfields layout")

就能解决本问题。

全局键盘监听

本程序还有一个功能是全局监听键盘,通过特殊的快捷键组合就可以直接触发读取图片上传图片的操作。但是由于这个功能使用到了pyHook这个库。但是这个库在设计上存在缺陷,如果当前窗体的标题包含Unicode字符时,会导致Python崩溃。因此这个功能默认不启动。

获取键盘按键

如果不清楚某个键盘按键对应的字符串是什么样子的,可以运行QueryKey.py这个文件,运行以后按下某个键,控制台上就会显示相应的信息。其中Key就是可以设置到SHORT_KEY_ONESHORT_KEY_TWO的内容。如图为按下键盘左Shift键以后显示的信息。

TODO

  • 支持更多的截图方式
  • 支持更多的图床
  • 窗口隐藏
  • 解决pyHook的问题
  • 适配Linux 和 Mac OS

本文分享自微信公众号 - 未闻Code(itskingname)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-06-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏极客猴

100行代码爬取全国所有必胜客餐厅信息

当我刚接触 Python 时,我已经被 Python 深深所吸引。Python 吸引我的地方不仅仅能用其编写网络爬虫,而且能用于数据分析。我能将大量的数据中以图...

15610
来自专栏破晓之歌

极验验证demo(django+vue) 原

偶然翻看博客,发现有人介绍geetest,看了一下感觉上手比较容易,sui遂注册使用。

57310
来自专栏肖洒的博客

【python】【Djang】GPS/北斗串口数据实时定位百度地图

本项目为从串口读取GPS/北斗设备接收数据,进行处理后使用百度地图api实时显示定位。

1.4K20
来自专栏ATYUN订阅号

Python中4种更快速,更轻松的数据可视化方法(含代码)

数据可视化是任何数据科学或机器学习项目的重要组成部分。我们通常会从探索性数据分析(EDA)开始,以获得对数据的一些见解,然后创建可视化,这确实有助于使事情更清晰...

16520
来自专栏磐创AI技术团队的专栏

TensorFlow系列专题(八):七步带你实现RNN循环神经网络小示例

【前言】:在前面的内容里,我们已经学习了循环神经网络的基本结构和运算过程,这一小节里,我们将用TensorFlow实现简单的RNN,并且用来解决时序数据的预测问...

13610
来自专栏栗霖积跬步之旅

Python中文报错问题

异常信息:SyntaxError: Non-ASCII character '\xe6' in file D:/pythonlearning/HelloPyth...

16910
来自专栏生信小驿站

R.python常见问题④(R语言添加环境变量)

打开环境变量对话框,控制面板>系统>高级系统设置>环境变量,选择“Path”这个环境变量,点击编辑,可以添加环境变量的值,添加Rscript.exe 所在的路径...

18120
来自专栏python百例

122-python交互解释器tab补全功能

进入python交互解释器后,按tab键默认是缩进功能,而不是代码补全。为了实现代码补全,可以采用如下操作: 1、创建指令补全文件

13320
来自专栏coder修行路

关于python协程中aiorwlock 使用问题

最近工作中多个项目都开始用asyncio aiohttp aiomysql aioredis ,其实也是更好的用python的协程,但是使用的过程中也是遇到了很...

9620
来自专栏FreeBuf

我的天!又一个僵尸网络开源了BYOB僵尸网络开源代码

BYOB是一个开源项目,该项目给研究人员和开发者提供了一个能够搭建和操作基础僵尸网络的框架。大家都知道,僵尸网络每年都会感染数百万台联网设备,为了研究现代僵尸网...

36630

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励