在markdown中插入图片

Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式。

1. 在Markdown中插入图片

由于Markdown是普通文本,所以它无法像word一样直接在文件中插入图片。要在Markdown中插入图片,通常有三种方式。

(1) 插入本地图片

在Markdown中插入本地图片的语法为:

![img](/home/picture/1.png)

括号中为图片的路径,可以是相对路径或绝对路径。这种情况下,一旦本地图片丢失或路径更改,都无法显示图片

(2) 插入网络图片

直接在括号里面填写网络图片路径即可:

![img](http://baidu.com/picture/picture.png)

这种情况下非常依赖于网络。

(3) 把图片存入Markdown文件中

Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。

可以将图片转化为base64编码,直接放到Markdown文件中,将图片显示出来。其语法为:

![img][figure]

[figure]:data:image/png;base64,iVBORw0...

其中iVBORw0之后为png格式图片的base64编码。可以将其放置于文件的最后。这种情况,如果图片较多,会导致文件比较大。

本文考虑将图片转化为base64编码,在Markdown中插入图片。

2. 算法概述

一般插入的图片有两种,一种是直接从剪切板中插入图片,另一种是从本地文件中导入图片。

优先考虑剪切板,如果剪切板中有图片,则将剪切板中的图片转化为base64编码。如果没有图片,则选择一张本地图片,获取其base64编码。这两种方式都需要将图片另存为png格式,然后获取这个png格式图片的base64编码。

在得到的base64字符串中添加用于Markdown的头部字符串,并将其写入剪切板。随后直接去Markdown文件中粘贴。

3. 程序代码

使用python 3实现,代码如下:

# python 3
# writen by Liangjin Song on 20200410
# Convert pictures to base64 encoding for using in markdown
import win32ui,os,base64
from PIL import Image, ImageGrab
import win32clipboard as cb
import win32con

# the temporary picture name
tmp="C:\\Users\\Liangjin\\Pictures\\base6.png"

# saving the picture as the temporary image
def tmp_image():
    # check for pictures in the clipboard
    im = ImageGrab.grabclipboard()
    if isinstance(im, Image.Image):
        # save the picture from the clipbord
        im.save(tmp, "png")
    else:
        # select an image for the disk
        print("No image in clipboard, and please select an image.")
        dlg = win32ui.CreateFileDialog(1)
        dlg.SetOFNInitialDir('C:\\Users\\Liangjin\\Pictures')
        dlg.DoModal()
        filename = dlg.GetPathName()
        im=Image.open(filename)
        # saving the selected picture as a temporary image
        im.save(tmp,'png')

# get the base64 encoding of the temporary image
def img_base64():
    f=open(tmp,'rb')
    # base64 encode
    s=base64.b64encode(f.read())
    # the format used in markdown file
    s=b'[]:data:image/png;base64,'+s
    f.close()
    # delete the temporary image
    os.remove(tmp)
    return s

# Copy base64 encoding to clipboard
def set_clip(s):
    cb.OpenClipboard()
    cb.EmptyClipboard()
    cb.SetClipboardData(win32con.CF_TEXT, s)
    cb.CloseClipboard()

# the main function
if __name__ == '__main__':
    tmp_image()
    set_clip(img_base64())

4. 效果

在markdown中插入图片_第1张图片


在markdown中插入图片_第2张图片

你可能感兴趣的:(python,Markdown,&,latex,python,markdown)