# -*- 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)