【解决】Typora图片缩放后恢复Markdown格式

Python脚本转换Typora中的Html标签(2)

在上文 Python脚本转换Typora中的Html标签(1)当中,介绍了一种转换<span>标签的方式,接下来分析转换Typora中<img>标签的方法

需求分析

首先说明一下为什么在Typora中会出现<img>标签,主要的原因是Typora支持对图像的缩放,而这种缩放是传统markdown语法所不具备的,是利用html中的<img>实现的,具体可以参考一下以下的例子,对于同一张图片

  • 使用markdown进行插入的格式如下图
    在这里插入图片描述

  • 使用<img>标签进行插入的格式如下图所示

在这里插入图片描述

而事实上对于Typora用户来说这是没有区别的,但是对于csdn来说,经过缩放后的图片是不会被转存的,也就是说博客当中使用的图片链接均是原有的链接,而对于使用自己图床的用户来说,就存在图片被盗链的风险(关于盗链可以自行搜索一下),而csdn是会对正常图片进行转存处理的,这样也相对比较安全,那么接下来就给出将<img>标签转换为markdown语法的python脚本

首先建立了如下的目录结构

transmd
├── transform.py
├── transformed
└── wait_transform

其中

  • wait_transform文件夹需要提前创建用于存放待转换的markdown文件

  • transformed文件夹为脚本自动创建,用于存放转换后的markdown文件

  • transform.py则是用于转换markdown文件的python脚本

  • 关于脚本功能的介绍可以参考上一篇文章 Python脚本转换Typora中的Html标签(1)中的介绍

transform.py的内容如下:

import os
import traceback
import bs4
from bs4 import BeautifulSoup


class TransformMD(object):
    def __init__(self):
        if not os.path.exists("transformed"):
            os.mkdir("transformed")

    def trans_img(self, line):
        """
        完成img标签到markdown图片格式的转换
        <img src="url" alt="xxx" style="zoom:33%;" />
        to
        ![xxx](url)
        """
        soup = BeautifulSoup(line, "html.parser")
        newLine = ''
        for content in soup.contents:
            if isinstance(content, bs4.element.Tag):
                url = content["src"]
                alt = content["alt"]
                newLine += "![" + alt + "](" + url +")"
            else:
                newLine += str(content)
        return newLine

    def transform(self, filename):
        try:
            name = filename.split("/")[1]
            savepath = "transformed/" + name[:-3] + "-transformed" + name[-3:]  #生成保存路径
            with open (filename, "r") as r, open(savepath, "w") as w:
                for line in r.readlines():
                    found_img = line.find("<img")   # 查找img标签
                    if found_img != -1:
                        w.write(self.trans_img(line))
                    else:
                        w.write(line)
        except Exception as e:
            print(filename)
            traceback.print_exc()

    def transformDir(self, dirname):
        """
        对dirname中对所有md文件进行转换
        :param dirname: 文件夹路径
        """
        for path, dir_list, file_list in os.walk(dirname):
            for file_name in file_list:
                if file_name[-3:] == ".md":
                    self.transform(os.path.join(path, file_name))


if __name__ == '__main__':
    TMD = TransformMD()
    TMD.transformDir("wait_transform")
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值