针对写markdown文章贴图过程繁琐的问题,写了一个小工具自用。(C++版)
源起
Markdown写作者都会对贴图的问题进行一番探索。好在现在有很多优秀的图床上传工具(比如PicGo)。
那为什么还会自己写一个工具呢?
主要是目前的工具不能完全满足我的需求,比如图片上传后,备注需注明是哪篇文章,方便整理。
这个工具是这两天利用闲散时间做成的,未来还会根据自我需要进行更新完善。
一开始是打算用python写的
需求
平台:VS2015
图床:github
开发前理清思路,罗列出需求是必要的。
于是我大概列了几点:
- 有UI界面,不要在控制台操作
- 采用直接拖入图片到窗口的形式,不要采用选择文件的形式(
懒) - 自动推送到github对应项目,形成外链
- 拖入图片时要求输入文章标题即符合备注格式
- 该文章标题以备注形式出现在github对应项
- url链接地址可以一键复制
- 给小工具起一个名字
原有上传图片的备注格式
事实证明最后一条最难
准备工作
把github图床项目下载到本地。
设计
最开始设计的是网页。后来考虑是网页的话,就要考虑用户独立性,比如设置账户登录,或者能证明是我本人的id什么的。(麻烦,不够快准狠)
整个问题大致分为三个。
- 拖动
图片拖动到窗口,并复制到本地图床文件夹。 - git推送
一开始打算直接调cmd完成,后来用bat脚本文件包装看起来清爽一点。 - 如何获取外链
最初是准备解析网页的。后来发现url有规律可循:
如 https://github.com/hubojing/test/blob/master/操作符重载之成员函数.png?raw=true
每一张图都是https://github.com/hubojing/项目名/blob/master/ 开头 ?raw=true结尾。
这就省了解析网页这一步,直接拼url就好了。
界面
代码
拖动
JingPicDlg.h加上
1 | afx_msg void OnDropFiles(HDROP hDropInfo); |
JingPicDlg.cpp BEGIN_MESSAGE_MAP
加上ON_WM_DROPFILES()
1 | void CJingPicDlg::OnDropFiles(HDROP hDropInfo) |
复制到剪贴板
1 | BOOL CJingPicDlg::CopyToClipboard(const char* pszData, const int nDataLen) |
调用脚本
1 | char s[MAX_PATH]; |
脚本
1 | E: |
url拼接
本来这里应该有UrlEncode一步的,毕竟我所得到的url里有中文字,需要编码后才是真正所需的url。
比如我们现在拼接的地址是:https://github.com/hubojing/test/blob/master/动态分配所得的array.png?raw=true
应得到:https://github.com/hubojing/test/blob/master/动态分配所得的array.png?raw=true
然而我发现在浏览器里输入上面的网址,也能得到正确的图片,大概是github已经处理了该问题。所以我就偷懒了
注意事项
- 克隆项目到本地最好选择ssh方式下载,可以避免输入用户名密码。
第一次推送要用git push -u origin master
,加了参数-u后,下次即可直接用git push
代替git push origin master
。
代码地址
再没有理由写文章不带图了o(一︿一+)o