针对写markdown文章贴图过程繁琐的问题,写了一个小工具自用。(C++版)


源起

Markdown写作者都会对贴图的问题进行一番探索。好在现在有很多优秀的图床上传工具(比如PicGo)。
那为什么还会自己写一个工具呢?
主要是目前的工具不能完全满足我的需求,比如图片上传后,备注需注明是哪篇文章,方便整理。

这个工具是这两天利用闲散时间做成的,未来还会根据自我需要进行更新完善。

一开始是打算用python写的

需求

平台:VS2015
图床:github
开发前理清思路,罗列出需求是必要的。
于是我大概列了几点:

  1. 有UI界面,不要在控制台操作
  2. 采用直接拖入图片到窗口的形式,不要采用选择文件的形式(
  3. 自动推送到github对应项目,形成外链
  4. 拖入图片时要求输入文章标题即符合备注格式
  5. 该文章标题以备注形式出现在github对应项
  6. url链接地址可以一键复制
  7. 给小工具起一个名字

原有上传图片的备注格式

备注格式
备注格式

事实证明最后一条最难

准备工作

把github图床项目下载到本地。

设计

最开始设计的是网页。后来考虑是网页的话,就要考虑用户独立性,比如设置账户登录,或者能证明是我本人的id什么的。(麻烦,不够快准狠

整个问题大致分为三个。

  1. 拖动
    图片拖动到窗口,并复制到本地图床文件夹。
  2. git推送
    一开始打算直接调cmd完成,后来用bat脚本文件包装看起来清爽一点。
  3. 如何获取外链
    最初是准备解析网页的。后来发现url有规律可循:
    https://github.com/hubojing/test/blob/master/%E6%93%8D%E4%BD%9C%E7%AC%A6%E9%87%8D%E8%BD%BD%E4%B9%8B%E6%88%90%E5%91%98%E5%87%BD%E6%95%B0.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
2
3
4
5
6
7
8
9
10
11
12
13
14
void CJingPicDlg::OnDropFiles(HDROP hDropInfo)
{
UINT Num;
TCHAR filePath[MAX_PATH];
Num = DragQueryFile(hDropInfo, 0xFFFFFFFF, NULL, 0);
if (Num > 0)
{
for (UINT i = 0; i < Num; i++)
{
DragQueryFile(hDropInfo, i, filePath, sizeof(filePath));
}
}
DragFinish(hDropInfo);
CDialog::OnDropFiles(hDropInfo);

复制到剪贴板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
BOOL CJingPicDlg::CopyToClipboard(const char* pszData, const int nDataLen)
{
if (::OpenClipboard(NULL))
{
::EmptyClipboard();
HGLOBAL clipbuffer;
char *buffer;
clipbuffer = ::GlobalAlloc(GMEM_DDESHARE, nDataLen + 1);
buffer = (char *)::GlobalLock(clipbuffer);
strcpy(buffer, pszData);
::GlobalUnlock(clipbuffer);
::SetClipboardData(CF_TEXT, clipbuffer);
::CloseClipboard();
return TRUE;
}
return FALSE;
}

调用脚本

1
2
3
char s[MAX_PATH];
sprintf_s(s, "%s %s", "E:\\AutoUpload.bat", strNotes);
system(s);

脚本

1
2
3
4
5
6
E:
cd E:\test @rem 此处是本地图床地址
git add .
git commit -m %1%
git push
exit

url拼接

本来这里应该有UrlEncode一步的,毕竟我所得到的url里有中文字,需要编码后才是真正所需的url。
比如我们现在拼接的地址是:https://github.com/hubojing/test/blob/master/动态分配所得的array.png?raw=true
应得到:https://github.com/hubojing/test/blob/master/%E5%8A%A8%E6%80%81%E5%88%86%E9%85%8D%E6%89%80%E5%BE%97%E7%9A%84array.png?raw=true

然而我发现在浏览器里输入上面的网址,也能得到正确的图片,大概是github已经处理了该问题。所以我就偷懒了

注意事项

  • 克隆项目到本地最好选择ssh方式下载,可以避免输入用户名密码。
    第一次推送要用git push -u origin master,加了参数-u后,下次即可直接用git push代替git push origin master

代码地址

JingPic——github图床外链小工具


再没有理由写文章不带图了o(一︿一+)o