博客园作为图床,上传图片自动添加图片水印
专属于博客园的教程。
markdown上传图片,添加图片水印,再上传到博客园图床。
前言
图床有防盗链什么的,处理起来实在是麻烦。
既然博客园支持图床,我现在只在博客园写,那就捣鼓了一下。
今天是通义千问工程师。菜鸡啥也不会。
参考教程
首先应参考教程配置,保证博客园图床正确,再对python文件进行修改,我也在下面沾了我的配置。
https://www.cnblogs.com/Journing/p/16671325.html
博客园配置
在i.cnblogs.com/settings里,开启这个。
![image-20231208220149240](https://img2023.cnblogs.com/blog/2323498/202312/2323498-20231208220149803-1165715172.png)
Typora配置
在typora里面配置python文件为上传服务。python代码在后面。
![image-20231208221657348](https://img2023.cnblogs.com/blog/2323498/202312/2323498-20231208221658131-1267798763.png)
py代码
准备一张shuiyin.png图片,将shuiyin.png图片和python文件放在一起。
我的typora和md文件都在C盘,没有尝试过读取图片的问题。
创建一个cnblogs.py。代码如下:(对上面大佬的代码改改改)
CONFIGS = {
"url": "",
"username": "",
"password": "",
"blogID": "",
}
import os
import sys
import xmlrpc.client as client
import mimetypes
from PIL import Image
# 添加水印
def add_watermark(image_path):
im = Image.open(image_path)
# 加载水印图像
watermark_file = "shuiyin.png" # 假设这个文件在你的脚本所在目录下
watermark_im = Image.open(os.path.join(os.path.dirname(__file__), watermark_file)) # 使用相对路径
# 获取原始图像和水印图像的尺寸
width, height = im.size
watermark_width, watermark_height = watermark_im.size
# 将水印图像的尺寸设置为原始图像的50%
watermark_width *= 0.5
watermark_height *= 0.5
watermark_im = watermark_im.resize((int(watermark_width), int(watermark_height)), resample=Image.BILINEAR)
# 计算水印的位置(这里假设我们将其放在右下角)
x = width - int(watermark_width) - 10
y = height - int(watermark_height) - 10
# 将水印图像粘贴到原始图像上
im.paste(watermark_im, (x, y), mask=watermark_im.convert("RGBA"))
# 然后保存处理后的图像
base_dir = os.path.dirname(os.path.abspath(image_path))
new_image_path = os.path.join(base_dir, "watermarked_" + os.path.basename(image_path))
im.save(new_image_path)
return new_image_path
def get_image(image_path):
image_mimetype = mimetypes.guess_type(image_path, True)[0]
image_name = os.path.basename(image_path)
image_bits = client.Binary(open(image_path, 'rb').read())
image = {
"name": image_name,
"type": image_mimetype,
"bits": image_bits,
}
return image
def upload_image(image_path):
image = get_image(image_path)
server = client.ServerProxy(CONFIGS.get("url"))
url = server.metaWeblog.newMediaObject(CONFIGS.get("blogID"), CONFIGS.get("username"),
CONFIGS.get("password"), image).get("url")
return url
def main(argv):
args = iter(argv)
next(args)
for image_path in args:
img1 = add_watermark(image_path)
print(upload_image(img1))
if __name__ == "__main__":
main(sys.argv)