博客园作为图床,上传图片自动添加图片水印

发布时间 2023-12-08 22:30:28作者: zlzgzlz

专属于博客园的教程。

markdown上传图片,添加图片水印,再上传到博客园图床。

前言

图床有防盗链什么的,处理起来实在是麻烦。

既然博客园支持图床,我现在只在博客园写,那就捣鼓了一下。

今天是通义千问工程师。菜鸡啥也不会。

参考教程

首先应参考教程配置,保证博客园图床正确,再对python文件进行修改,我也在下面沾了我的配置。

https://www.cnblogs.com/Journing/p/16671325.html

博客园配置

在i.cnblogs.com/settings里,开启这个。

image-20231208220149240

Typora配置

在typora里面配置python文件为上传服务。python代码在后面。

image-20231208221657348

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)