CSDN上传md的坑与解决方法

上传md文件的方法

CSDN支持直接上传本地Markdown文件

点击发布

进入撰写页面后选择使用MD编辑器

点击导入就可以选择直接上传本地的md文件

坑一、导入后错乱

比如像这样

(上图)对比我在Typora中写的内容(下图)能发现很明显是错乱了

因此这里建议各位使用另外一种方式 ->直接Ctrl+C Ctrl+V复制粘贴

这样子很明显就没有问题了

坑二、图片转存失败

如图

遇到这种情况有两种可能

  • 图片是本地图片(一般都是这种)
  • 外链图片真的有防盗链机制

对于有防盗链机制的外链图片就按它说的先保存后上传,当然最好的方式就是 ->截屏

而对于本地图片(即图片存放在你的电脑上)这种情况,参考我的另一篇博客Markdown+Typora使用教程_NikkoLKR的博客-CSDN博客

只需要给Typora设置一下图床,将图片存放于网络上就可以解决问题了

坑三、图片加载不出来

如图

这个情况一般是由于在Typora中调整了图片缩放导致的

像这两张图我都在Typora中调整为了50%大小

Typora自动将它转换为使用HTML标签,而其中的style中的zoom属性无法被CSDN识别,因此图片无法加载

解决方法有两种(前提:已经配置好图床)

最简单的方法 ->不缩放图片

这种方法固然有效,但是在CSDN中图片默认不会居中,而且全部都很大,不够美观

比较好的解决方法->使用python脚本转换
脚本代码往下翻
先说说这个脚本能够做什么

  • 将图片缩放标签改为CSDN能够识别的形式
  • 居中图片

用法也很简单

使用前需要配置Python环境,并且安装Python的PIL

这些大家自行搜索教程,这里不再赘述

首先将我给的python文件放到 要转换的md文件 的同一目录下

点击文件管理器左上角的框框,输入cmd后回车,打开命令行

在cmd中输入一下内容并回车

python3 transform.py 你的md文件名.md

我这里想转换的是 PID.md 文件就输入如下命令

python3 transform.py PID.md

当看到以下内容时代表已经转换完成(图片比较多的话就耐心等待一下)

此时目录中会出现一个带有CSDN前缀的md文件

打开这个文件直接Ctrl+C Ctrl+V复制到CSDN的MD编辑器中

可以看到图片正常显示,并且跟(下图)源文件中的图片大小一致

(转换后的图片标签Typora不识别,所以反而图片大小有问题,但是上传到CSDN中图片大小是与源文件一致的)

Python脚本代码
这篇文章中的图片都是经过了这个脚本转换的

脚本采用了正则匹配来获取图片信息,学过python的同学应该比较熟悉了

代码参考了蔗理苦的博客-CSDN博客_typora调整图片大小

但是做了一定的修改,提高了易用性并且保证在当前的CSDN的MD编辑器中可用(他的源码有概率会出问题)

懒得新建python文件的同学在这里自行下载

新建文件的同学记得运行的时候修改为你自己的.py文件名

感兴趣的话自行研究代码

import io
import re
import sys
import urllib.request
from PIL import Image

def get_size(img_path):  # 根据图片链接获取图片的大小
    response = urllib.request.urlopen(img_path)
    temp_img = io.BytesIO(response.read())
    img = Image.open(temp_img)
    return img.size

def alter(s):  # 处理未修改大小的图片
    return "![](" + s.group(2) + "#pic_center)"

def alter_zoom(s):  # 处理 typora 中用 zoom 属性修改过大小的图片
    zoom_value = int(s.group(4)) / 100
    w, h = get_size(s.group(2))
    new_w, new_h = int(zoom_value * w), int(zoom_value * h)
    return "![](" + s.group(2) + "#pic_center" + f' ={new_w}x{new_h})'
    #return s.group(1) + s.group(2) + "#pic_center" + s.group(3) + f'width="{s.group(4)}%"' + s.group(5) #注释掉的这种方法不保证100%可以

def alter_zoom_empty(s):  # 处理 typora 中用 zoom 属性修改过大小的图片
    return "![](" + s.group(2) + "#pic_center)"

file_name = sys.argv[1]
with open("./" + file_name, "r", encoding="utf-8") as fin, open("./" + 'CSDN_' + file_name , "w", encoding="utf-8") as fout:
    pattern = re.compile(r"(!\[image-\d+]\()(.+)(\))")  # 未修改大小的图片的匹配规则
    pattern_zoom = re.compile(r'(<img src=")(.*)(" .* )style="zoom:\s?(\d+)%;"(\s?/>)')  # 带有 zoom 属性的图片的匹配规则
    pattern_zoom_empty = re.compile(r'(<img src=")(.*)(" .* )style="zoom:();"(\s?/>)')  # 带有 zoom 属性的图片的匹配规则
    content = fin.read()  # 读取文件内容
    content1 = pattern.subn(alter, content)  # 第一次处理
    content2 = pattern_zoom.subn(alter_zoom, content1[0])  # 第二次处理
    content3 = pattern_zoom_empty.subn(alter_zoom_empty, content2[0])  # 第三次处理
    fout.write(content3[0])  # 写入新文件
    print("原始图片替换次数:", content1[1])
    print("zoom 属性图片替换次数:", content2[1] + content3[1])
    print("总共替换次数:", content1[1] + content2[1] + content3[1])

其他坑

待补充。。。

大家如果有发现还有其他坑的话可以提出来,我也可以尝试去找找解决办法

一个深刻的问题

既然用markdown有这么多问题,解决这么麻烦,为啥还要用呢?

首先,很多问题目前来看是CSDN的编辑器不够好导致的,只是自己保存笔记完全没这些问题

其次,很多东西(例如图床)都是配置一次后就可以一直好好使用的,md写笔记效率依然嘎嘎高

最后,寻找解决方法也是一个学习提升的过程,不一定说是学习python脚本什么的,而是不断的提升自己寻找解决方案的思路

大家能够看到这篇文章,就说明你已经掌握了一定的搜索资料和解决方法的能力

希望大家能够继续提升,在遇到问题时能够想出自己的解决方案~~


文章撰写不易,觉得有用的话点赞、关注、收藏一下吧~~

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NikkoLKR

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值