摘要

在写博客的过程中经常要插入图片,许多博客平台提供了图片上传的服务,但是不能保证长期有效,不同平台还不能通用,所以要通过搭建统一的图床来实现。有用服务器作为图床和第三方图床,前者限制多,需要备案,后者不是很可靠,而用代码托管平台做图床,既稳定可靠没有很大限制,而且数据实现同步,即使云端的数据丢失了,本地还有备份,而在中国,为了提升访问速度,我们并不选取GitHub做图床,而是选择了Gitee,本文将使用Python实现对上传的图片自动压缩,自动编码,以及自动推送到远程仓库,但由于Gitee的限制,最后仍需要手动对Gitee Pages进行更新

新建仓库

如果没有帐户,先进入Gitee主页注册账户,接着新建仓库,名称为resource,路径为res(使用res是为了使图片链接看起来更加简洁)

新建完成后需要初始化Readme.md文件,同时复制地址(为了使用Gitee Pages服务):

然后打开服务选项:

点击Gitee Pages:

点击“启动”启动服务:

克隆仓库

在计算机中找一个位置建一个文件夹,在文件夹中使用Git Bash输入命令克隆仓库到本地:

git clone https://gitee.com/xxx/xxx.git

克隆完成后在本地生成了一个名为res的文件夹,此时可以删除文件夹中的Readme.md文件,在res文件夹中新建空文件夹upload_images

在与res同级的目录下新建空文件夹temp用于存放待上传的文件:

获取TinyPng的"API Key"

进入TinyPng的主页(https://tinypng.com/),在右上角进行注册:

输入邮箱地址:

打开邮箱验证,点击邮件中的"Log in with magic link",点击刚刚注册的地方,选择"Account page":

注册成功后会出现如下页面,启用并复制"API Key"

TinyPng每月支持免费转换500张图片,并且重复的图片多次压缩只算做一次,这对图片插入量一般的人来说已经足够了,如果觉得一个月500张不够,又不想花钱,可以多注册几个号

安装需要的Python包

脚本需要用到两个包:tinifyGitPython

打开cmd命令提示符,输入安装指令:

pip install --upgrade tinify
pip install gitpython

如果失败可以尝试本地安装

编写Python脚本

在与res同级的目录下新建upload.py

[

用python的IDE打开该py文件写入如下代码:

import random
import time
import os
import shutil
from git import Repo
import tinifyrepo = Repo('./res') #创建版本库对象
tinify.key = '****************' #在此粘贴刚刚复制的API Keyexts = ['.png','.jpg','.bmp'] #支持的图像格式
compression = ['.png','.jpg'] #支持压缩的图像格式
srcdir = './temp' #源文件夹
dstdir = './res/upload_images' #目标文件夹
url = 'https://xxx.gitee.io/res/upload_images/' #图床路径(末尾必须加“/”),将xxx替换成自己的用户名def random_hex(length):result = hex(random.randint(0,16**length)).replace('0x','').lower()if(len(result)<length):result = '0'*(length-len(result))+resultreturn resultdef auto_code(ext):while True:name = random_hex(8) #随机8位16进制编码result = os.path.join(dstdir,name + ext)if not os.path.exists(result):break #目标路径不存在则可以移动图片return resultdef main():f = open('./output.txt','w') #打开输出文件list = os.listdir(srcdir) #列出文件夹下所有的目录与文件for i in range(0,len(list)):srcpath = os.path.join(srcdir,list[i])if not os.path.isfile(srcpath):continue #不是文件则跳过ext=os.path.splitext(srcpath)[-1].lower() #获取文件扩展名if ext not in exts:continue #不是支持的图像格式则跳过dstpath = auto_code(ext)if ext in compression:tinify.from_file(srcpath).to_file(srcpath) #压缩文件shutil.move(srcpath,dstpath) #移动文件print('成功压缩并移动:' + os.path.basename(srcpath))else:shutil.move(srcpath,dstpath) #移动文件print('成功移动:' + os.path.basename(srcpath))f.write(os.path.basename(srcpath) + ':![](' + url + os.path.basename(dstpath) + ')\n') #将原始文件名和与之对应的图片网址写入txt文件f.close()print('输出文件output.txt已生成')print(repo.git.add('--all')) #添加全部更改print(repo.git.commit('-m upload images')) #提交print(repo.remote().push('master')) #推送print('已推送至远程仓库,python即将退出')time.sleep(1)if __name__ == '__main__':main()

测试功能

将图片复制到temp文件夹,运行upload.py,在其运行完毕后打开Gitee Pages服务进行更新,然后打开output.txt,复制里面的Markdown语句至Markdown编辑器即可看见图片

使用Python搭建Gitee图床相关推荐

  1. 从零开始免费搭建自己的博客(五)——Typora + PicGo + GitHub/Gitee图床

    ​ 本文是博客搭建系列文章第五篇,其他文章链接: 从零开始免费搭建自己的博客(一)--本地搭建 Hexo 框架 从零开始免费搭建自己的博客(二)--基于 GitHub pages 建站 从零开始免费搭 ...

  2. typora+picgo+gitee搭建免费图床纵享丝滑

    typora+picgo+gitee搭建免费图床纵享丝滑 0.写在前面 由于之前自己在github搭了自己的博客,伴随之而来的一系列问题.如github不显示图片,github图床加载太慢等一系列问题 ...

  3. 利用Gitee搭建个人图床(上)

    利用Gitee搭建个人图床(上) 借助冷文图床操作gitee实现图床功能 更多内容 冷文博客 图床预览http://image.kevinlu98.cn/ 冷文图床简介 一款以码云作为存储平台的图床工 ...

  4. 利用Gitee搭建个人图床(下)

    利用Gitee搭建个人图床(下) 借助冷文图床操作gitee实现图床功能 图床预览http://image.kevinlu98.cn/ 说明 上一篇利用Gitee搭建个人图床(上)我们介绍了冷文图床以 ...

  5. 利用Gitee搭建免费图床(详细教程)

    我为什么要搭建图床呢??? 我的typora能写笔记,能插入图片,为啥要费劲搭图床呢? 你可以尝试将插入图片的md文件发给别人,对,他看不到图片,那咋办? 方法一:md文件+对应路径图片打包: 方法二 ...

  6. 基于Gitee搭建免费图床

    基于Gitee搭建免费图床 1.为什么要基于Gitee搭建免费图床 ​ 简单讲,主要是因为大家熟悉的免费图床各有不足之处.例如:七牛云回收了测试域名,配置自定义域名需要绑定主机(参考:[教程]使用gi ...

  7. mac m1使用picGo + gitee搭建免费图床

    简介 注意: gitee加了防盗链,可能是永久的, 现在这篇文章没意义,先不要看了 目前换七牛云了,之后来修改这篇文章 图床也就是储存图片的服务器,用来存储我们计算机上的图片,写博客时更加方便了不是 ...

  8. 用PicGo+Gitee搭建免费图床

    首先有自己的gitee账户,并且里面要有一个公开的库,现在gitee需要有代码上传才能公开,随便写点东西上传就行. 还需要有picgo软件. 开始搭建 进入gitee,进入设置 选择私人令牌 新建令牌 ...

  9. 【python自动化】搭建个人图床,批量上传图片生成外链

    [python自动化]搭建个人图床,批量上传图片生成外链 简介 注册七牛云 新建空间 域名查看 密钥查看 python自动化脚本 安装七牛云三方库 登陆七牛云 遍历找出文件夹中的所有图片 批量上传图片 ...

最新文章

  1. 关于学习Python的一点学习总结(13->浅复制和深复制)
  2. iOS 11.3立春后发布,电量用得快的人千万别升级!
  3. The server time zone value is unrecognized or repr
  4. java实现排程算法_康托展开算法和逆康托展开算法[Java实现]
  5. C++ 11 创建和使用共享 weak_ptr
  6. 嵌入式C语言编程课件,嵌入式系统C语言编程基础PPT课件
  7. dj电商-模型类设计-1.x-模型类抽象基类
  8. 【Java】四种方法复制视频文件比较
  9. ArcGIS利用数据驱动工具条批量出图(python代码)
  10. 一道错误答案传遍全网的逻辑面试题
  11. Mac电脑壁纸 Mac动态壁纸 小镇冬日夜景动态壁纸
  12. 灰色预测模型python实例_12-6:数学模型(灰色模型)与Python编程预测
  13. NoWritableEnvsDirError: No writeable envs directories configured.
  14. html平铺 拉伸 图片,[CSS]背景图片中平铺与拉伸
  15. 神经网络辨识的优势是,神经网络辨识的优势有
  16. 人工智能Java SDK:声纹识别
  17. 团队组成五个基本要素_团队的5个基本构成要素(5P):目标、定位、计划、职权、人...
  18. c语言 at指令gprs,gprs AT 指令
  19. 《牛津字典精华总结》- 初阶系列 - 字母 - A
  20. java system.nanotime_java - System.nanoTime()完全没用吗?

热门文章

  1. matlab可视化功能6,第6章MATLAB计算结果可视化
  2. codeforcesf382D-厉害的我的哥(德巴赫)
  3. 使用线性神经网络实现逻辑与和逻辑异或(一)
  4. 1024程序员节最新福利之2018最全java资料集合
  5. 5注册激活_国家医保服务平台APP激活绑定流程
  6. 干掉Intel、AMD?国产处理器架构都有哪些?
  7. linux下启动nginx报错libpcre.so.0 = not found
  8. C++中的运算符和运算符优先级总结
  9. 安装PS出现“由于找不到VCRUNTIME 140_1.dll”的解决方法
  10. JS 判断浏览器客户端类型(ipad,iphone,android)