105 lines
3.0 KiB
Python
105 lines
3.0 KiB
Python
|
# -*- coding:utf-8 -*-
|
|||
|
# @Author len
|
|||
|
# @Create 2023/10/16 19:58
|
|||
|
import cv2
|
|||
|
import qrcode
|
|||
|
from PIL import Image
|
|||
|
import random
|
|||
|
import numpy as np
|
|||
|
|
|||
|
# 生成二维码图像
|
|||
|
def makeQR():
|
|||
|
# print(color_map)
|
|||
|
width = 200 # 图像宽度
|
|||
|
# height = 300 # 图像高度
|
|||
|
data = "https://www.example.com" # 要编码的数据
|
|||
|
qr = qrcode.QRCode()
|
|||
|
qr.add_data(data)
|
|||
|
qr.make(fit=True)
|
|||
|
qr_img = qr.make_image()
|
|||
|
|
|||
|
# 转换为RGBA图像,以便修改颜色
|
|||
|
qr_img = qr_img.convert("RGBA")
|
|||
|
# 创建自定义颜色映射
|
|||
|
color_map_list = [{
|
|||
|
(0, 0, 0, 255): (255, 0, 0, 255) # 将黑色替换为红色 (R, G, B, Alpha)
|
|||
|
}, {
|
|||
|
(0, 0, 0, 255): (0, 255, 0, 255) # 将黑色替换为绿色 (R, G, B, Alpha)
|
|||
|
}, {
|
|||
|
(0, 0, 0, 255): (0, 0, 255, 255) # 将黑色替换为蓝色 (R, G, B, Alpha)
|
|||
|
}, {
|
|||
|
(0, 0, 0, 255): (255, 255, 0, 255) # 将黑色替换为黄色 (R, G, B, Alpha)
|
|||
|
}, {
|
|||
|
(0, 0, 0, 255): (0, 128, 0, 255) # 将黑色替换为深绿 (R, G, B, Alpha)
|
|||
|
}, {
|
|||
|
(0, 0, 0, 255): (144, 238, 144, 255) # 将黑色替换为浅绿 (R, G, B, Alpha)
|
|||
|
}, {
|
|||
|
(0, 0, 0, 255): (0, 0, 139, 255) # 将黑色替换为深蓝 (R, G, B, Alpha)
|
|||
|
}, {
|
|||
|
(0, 0, 0, 255): (173, 216, 230, 255) # 将黑色替换为浅蓝 (R, G, B, Alpha)
|
|||
|
}, {
|
|||
|
(0, 0, 0, 255): (153, 51, 255, 255)
|
|||
|
}, {
|
|||
|
# 不变
|
|||
|
}
|
|||
|
]
|
|||
|
color_map = random.choice(color_map_list)
|
|||
|
# 遍历图像的每个像素,根据颜色映射替换颜色
|
|||
|
new_img_data = []
|
|||
|
for item in qr_img.getdata():
|
|||
|
new_color = color_map.get(item[:4], item[:4])
|
|||
|
new_img_data.append(new_color)
|
|||
|
|
|||
|
# 更新图像数据
|
|||
|
qr_img.putdata(new_img_data)
|
|||
|
qr_img = qr_img.resize((width, width))
|
|||
|
|
|||
|
return qr_img
|
|||
|
|
|||
|
def rotate_image(image, angle):
|
|||
|
image = np.array(image) # 转换为opencv
|
|||
|
|
|||
|
# 获取图像的尺寸和中心点
|
|||
|
h, w = image.shape[:2]
|
|||
|
center = (w // 2, h // 2)
|
|||
|
# 获取旋转矩阵
|
|||
|
M = cv2.getRotationMatrix2D(center=center, angle=-angle, scale=1.0)
|
|||
|
# 进行仿射变换,borderValue设置为白色(255, 255, 255)
|
|||
|
rotated_image = cv2.warpAffine(src=image, M=M, dsize=(w, h), borderValue=(255, 255, 255))
|
|||
|
return rotated_image
|
|||
|
def makecanvas(count, number):
|
|||
|
# 创建一个空白画布
|
|||
|
canvas_width = 800
|
|||
|
canvas_height = 480
|
|||
|
background_color = (255, 255, 255) # 背景颜色(白色)
|
|||
|
canvas = Image.new("RGB", (canvas_width, canvas_height), background_color)
|
|||
|
|
|||
|
|
|||
|
images = []
|
|||
|
for i in range(number):
|
|||
|
|
|||
|
image = makeQR()
|
|||
|
# print()
|
|||
|
images.append(image)
|
|||
|
|
|||
|
|
|||
|
# 设置旋转角度范围
|
|||
|
min_rotation = 0
|
|||
|
max_rotation = 360
|
|||
|
xy = [(200, 0), (400,0), (200, 270), (400, 270)]
|
|||
|
c = 0
|
|||
|
# 在画布上放置图片
|
|||
|
for image in images:
|
|||
|
(x, y) = xy[c]
|
|||
|
c += 1
|
|||
|
|
|||
|
|
|||
|
canvas.paste(image, (x, y))
|
|||
|
|
|||
|
|
|||
|
# 显示画布
|
|||
|
# canvas.show()
|
|||
|
canvas.save(f'123/{count}.jpg')
|
|||
|
for i in range(30):
|
|||
|
|
|||
|
makecanvas(i, 4)
|