import qrcode
from PIL import Image
import requests
from io import BytesIO
import sys
import math


def createQrcode(url, file_name, output):
    logo_url = 'http://minio-sit.sunda.top/devplatform/upload/20231222/4369df9a7b84e81787d04a9e40a11e14.png'
    # 生成 QR Code 对象
    qr = qrcode.QRCode(
        version=1,  # 控制二维码的尺寸（取值1到40）
        error_correction=qrcode.constants.ERROR_CORRECT_H,  # 控制二维码的容错性
        box_size=10,  # 控制二维码中每个小格子的像素数
        border=4,  # 控制二维码四周留白的格子数
    )
    qr.add_data(url)
    qr.make(fit=True)

    # 生成 QR Code 图片
    img = qr.make_image(fill_color="black", back_color="white").convert("RGBA")

    # 下载 Logo 图片
    response = requests.get(logo_url)
    logo_img = Image.open(BytesIO(response.content))

    # 计算 Logo 的大小，这里将 Logo 的大小设置为 QR Code 的 1/4
    logo_size = (img.size[0] // 5, img.size[1] // 5)

    # 将 Logo 添加到 QR Code 图片中心
    img.paste(logo_img.resize(logo_size),
              ((img.size[0] - logo_size[0]) // 2, (img.size[1] - logo_size[1]) // 2))

    # 创建一个新的图像（白色背景）
    new_img = Image.new("RGB", (math.ceil(img.size[0] * 1.3), img.size[0]), (255, 255, 255))

    # 将裁剪后的图像粘贴到新的图像中
    new_img.paste(img, (math.ceil(img.size[0] * 0.15), 0))

    # 保存调整大小后的图像
    new_img.save("{output}/{file_name}.png".format(file_name=file_name, output=output))

    # 返回图片路径
    return "{output}/{file_name}.png".format(file_name=file_name, output=output)


if __name__ == "__main__":
    # 从命令行参数获取文件路径
    if len(sys.argv) != 4:
        print("Usage: 入参错误")
        sys.exit(1)

    url = sys.argv[1]
    file_name = sys.argv[2]
    output = sys.argv[3]

    # 上传文件并获取预签名URL
    presigned_url = createQrcode(url, file_name, output)
    print(presigned_url)
