如何往文章里添加图片
Markdown 图片语法

要添加图像,请使用感叹号 (!), 然后在方括号增加替代文本,图片链接放在圆括号里,括号里的链接后可以增加一个可选的图片标题文本。
图片链接可以是网络上的某张图片的地址,也可以是本地的图片路径。
本地图片路径可以是绝对路径,也可以是相对路径,相对路径就是以该md文件为起点。
Hexo 图片添加方法一:资源文件夹
可以把图片放在全局资源文件夹
source/images
里,然后通过
这种写法去引用图片。也可以给每篇文章建一个对应文章资源文件夹,需要将
config.yml
文件里的post_asset_folder
置为true
。当这个开关打开后,Hexo 将会在你每一次通过hexo new [layout] <title>
命令创建新文章时自动创建一个文件夹。然后通过标签{% asset_img example.jpg %}
去引用图片。
上面提到的全局资源文件夹和文章资源文件夹这两种方式,都只是 Hexo 的“方言”,如果把这样的md文件单独放进某个markdown编辑器里预览,是看不到图片的。
Hexo 图片添加方法二:Hexo 插件
xxx
├── a.jpg
├── b.png
└── c.jpg
xxx.md
安装好这个插件后,可以通过 
来引用图片。这样的话 Hexo 和 Markdown 编辑器都能正确预览图片了。
可以通过输入
npm search 插件名
来查看有哪些插件,然后再选择一个安装。
Hexo 图片添加方法三:图床
利用图床工具,上传图片,获取链接,然后填入链接。但是图床大多收费,有的就算现在不收费,你用一段时间就收你的费了。
Hexo 图片添加方法四:图片转文本
可以把图片转成base64编码,以文本的形式放进md文件里。但是base64编码会增大了三分之一的体积,而且同一个md文件里,如果图片太多的话,加载也慢。还有就是md文件会变得臃肿,不便于编辑。
有现成的网站,比方说图片转base64
也可以利用python,源码如下
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import os import pyperclip import base64 # 图片文件名 g_pic_name = 'IMG_2649' # 图片后缀名 g_pic_ext = 'webp' # 图片所在目录,从py文件所在的目录开始算,要跟斜杠 g_folder_name = '2022LaborDay/' if __name__ == '__main__': # 拼接完整的路径 fullpath = g_folder_name + g_pic_name + '.' + g_pic_ext fullpath = os.path.join(os.path.abspath('.'), fullpath) # 校验图片是否存在 is_file_exists = os.path.exists(fullpath) assert(is_file_exists) f=open(fullpath, 'rb') str1=base64.b64encode(f.read()) f.close() str2=str(str1, 'utf-8') str3='[' + g_pic_name + ']:data:image/' + g_pic_ext + ';base64,' + str2 pyperclip.copy(str3)
我这里用的Python3。这个脚本执行完之后,就可以粘贴字符串了。
再提供一个图形化界面程序:
#!/usr/bin/env python3 # -*- coding: utf-8 -*- from tkinter import * from tkinter import filedialog from tkinter import messagebox from PIL import Image, ImageTk import base64 import pyperclip import os class App: def __init__(self, master): self.master = master self.master.title('图片转Base64编码') self.master.geometry('400x400') self.label = Label(self.master, text='请点击按钮选择图片文件') self.label.pack(pady=20) self.button = Button(self.master, text='选择文件', command=self.select_file) self.button.pack(pady=10) self.image_label = Label(self.master) self.image_label.pack(pady=20) self.convert_button = Button(self.master, text='转换成Base64编码', command=self.convert) self.convert_button.pack(pady=10) def select_file(self): filetypes = ( ('所有文件', '*.*'), ('PNG 文件', '*.png'), ('JPEG 文件', '*.jpg'), ('WEBP 文件', '*.webp') ) filename = filedialog.askopenfilename( title='选择图片文件', initialdir='./', filetypes=filetypes ) if filename: self.filename = filename self.label.config(text=f'已选择文件:{self.filename}') image = Image.open(self.filename) image = image.resize((200, 200)) photo = ImageTk.PhotoImage(image) self.image_label.config(image=photo) self.image_label.image = photo def convert(self): if not hasattr(self, 'filename'): messagebox.showerror('错误', '请先选择图片文件') return with open(self.filename, 'rb') as f: data = f.read() base64_data = base64.b64encode(data) base64_str = base64_data.decode('utf-8') file_name_with_ext = os.path.basename(self.filename) file_name_without_ext, file_extension = os.path.splitext(file_name_with_ext) file_extension = file_extension[1:] final_str='[' + file_name_without_ext + ']:data:image/' + file_extension + ';base64,' + base64_str pyperclip.copy(final_str) # messagebox.showinfo('提示', '已复制Base64编码到剪贴板') self.label.config(text=f'已复制') root = Tk() app = App(root) root.mainloop()
为了美观再做一点改动
插入的这一长串字符串会把整个文章分割开,非常影响编写文章时的体验。
如果能够把大段的base64字符串放在文章末尾,然后在文章中通过一个id来调用,文章就不会被分割的这么乱了。
在要引用图片的地方这么写
![][str1]
这个
str1
是一个你自己指定的字符串,可以理解成是一个变量,用来寻找这个图片对应的base64字符串。在文章的末尾写
[str1]:data:image/这里写图片的格式如png;base64,这里写图片转出来的base64串
就可以了。