自动化替换 Markdown 中的本地图片引用

danelchern 8年前
   <p>懒是第一生产力。——沃兹基苄德</p>    <p>我写 Markdown 有个习惯,总是将引用到的图片(截图或保存的)先压缩,然后上传到图床(云存储)上,生成外链,然后在 Markdown 中引用。因为国内的云存储服务访问速度相对 GitHub 较快,同时在使用 Markdown 源文件时,不必连同图片一起传送或移动。</p>    <p>因此就催生了该半自动化工具脚本( <a href="/misc/goto?guid=4959671452984544071" rel="nofollow,noindex">GitHubd 传送门</a> )的诞生。</p>    <p>实现的效果如下:</p>    <p><img src="https://simg.open-open.com/show/a1d6cd8d1d4621129c20813c71c4675c.jpg"></p>    <h3>几点说明</h3>    <ul>     <li><strong>图片压缩</strong> :本文直接调用的是 <a href="/misc/goto?guid=4958839376500515304" rel="nofollow,noindex">TinyPNG</a> 站点的 API,该站提供的压缩服务还是不错的,图片压缩率高,且压缩前后显示效果差别很小。对于开发者而言,该网站上相关文档也是相当齐全的。</li>     <li><strong>图片上传</strong> :我选择的是 <a href="/misc/goto?guid=4958985221406502081" rel="nofollow,noindex">LeanCloud</a> ,因为之前刚开始接触云存储选择了这个,后来就一直用了,国内的还可以选择七牛的云存储提供商( LeanCloud 文件存储实际用的也是七牛),都有相关的开发文档的。</li>     <li><strong>本地数据库存储</strong> :脚本中会将文件的 hash 值和 url 储存到本地数据库 ImageInfo.db 中,避免相同问题多次压缩上传。</li>    </ul>    <h3>简单流程图</h3>    <p><img src="https://simg.open-open.com/show/d5fd94588a09973a7d7c61ee48455daa.jpg"></p>    <h3>使用</h3>    <p>1. 安装环境和依赖</p>    <ol>     <li>Python 2.7 环境,自行搜索</li>     <li> <p>安装 tinify package,遇到问题可以看 <a href="/misc/goto?guid=4959671453129914964" rel="nofollow,noindex">TinyPNG – API Reference</a> :</p> <pre>  <code class="language-bash"> pip install --upgrade tinify  </code></pre> </li>     <li> <p>安装 leancloud-sdk package,遇到问题可以看 <a href="/misc/goto?guid=4959671453208772143" rel="nofollow,noindex">LeanCloud Python Doc</a> :</p> <pre>  <code class="language-bash"> pip install leancloud-sdk  </code></pre> <p>or</p> <pre>  <code class="language-bash"> easy_install leancloud-sdk  </code></pre> </li>    </ol>    <p>2. 填写你申请的相关 API KEY(在 replace_image_in_md.py 文件中填写)</p>    <pre>  <code class="language-bash">TINY_API_KEY = "your_tiny_png_api_key"  LEAN_CLOUD_API_ID = "your_lean_cloud_app_id"  LEAN_CLOUD_API_KEY = "your_lean_cloud_api_key"  </code></pre>    <p><a href="/misc/goto?guid=4959640620794364332" rel="nofollow,noindex">获取 TinyPNG api key</a></p>    <p><a href="/misc/goto?guid=4958985221406502081" rel="nofollow,noindex">获取 LeanCloud api key & id</a></p>    <p>3. 编写你的 Markdown 文件 并 引用本地图片文件,如下图所示:</p>    <pre>  <code class="language-bash">this is a image   ![](img/monkey.jpg)  </code></pre>    <p>4. 使用自动化脚本:</p>    <pre>  <code class="language-bash">python replace_image_in_md.py your.md output.md  </code></pre>    <p>执行完之后,本地图片的引用将会被替换成压缩后的图片的外链( url ),如下图所示:</p>    <pre>  <code class="language-bash">this is a image   ![](http://ac-QYgvX1CC.clouddn.com/a2ec3a2a375f8c61.jpg))  </code></pre>    <h3>小技巧</h3>    <p>如果你是 Linux 或 OS X 用户,你可以将该脚本放在一个固定的位置,然后在你的 .bashrc 或者 .zshrc 中添加类似下面的 alias:</p>    <pre>  <code class="language-bash">alias lzmd="python ~/Develop/tools/lazymd/replace_image_in_md.py"  </code></pre>    <p>然后在你需要使用脚本的时候,在任何地方打开终端,输入 lzmd 即可:</p>    <pre>  <code class="language-bash">lzmd your.md output.md  </code></pre>    <h3>最后</h3>    <p>感谢基友 <a href="/misc/goto?guid=4959666001767450059" rel="nofollow,noindex">Brucezz</a> 在开发中提供的帮助。</p>    <p><a href="/misc/goto?guid=4959671452984544071" rel="nofollow,noindex">项目 GitHud 地址</a></p>    <p>第一次发 Python 开源项目,本身 Python 就比较菜,如果你有任何建议或意见,请在 GitHub 提 issue 或 pr,或者评论给我留言,谢谢~</p>    <p>来自: <a href="/misc/goto?guid=4959671453357182280" rel="nofollow">http://laobie.github.io/python/2016/04/24/replace-image-file-in-markdown.html</a></p>