
背景需求:
班级里购买了娃娃家、超市、小医院等游戏材料。
超市收银机配了一个“扫码手机”。
两个收银机器,只有两个塑料扫码手机,孩子们不够玩。

所以我想做人手一套的“扫码手机”。
图片下载

最新的万相2.5
关键词:简笔画,卡通风格。白色背景,一只手机正面,屏幕上有二维码

用程序下载
'''
20250802通义万相2.2下载通义照片 copy
Python下载通义万相的图片(存在问题,不能停止,只能默认下载300张,删除多余)
星火讯飞,阿夏
200%
20251003
'''
import os,time
import pyautogui
import pyperclip
import re
import win32api
import win32con
import sys
import ctypes
import time
name='20251009手机二维码'
# 先打开微信
num=1
def minimize_active_window():
try:
if sys.platform == 'win32':
# 获取当前活动窗口的句柄
hwnd = ctypes.windll.user32.GetForegroundWindow()
# 最小化窗口
ctypes.windll.user32.ShowWindow(hwnd, 6) # 6 对应 SW_MINIMIZE
return True
else:
print("此功能仅支持Windows系统")
return False
except Exception as e:
print(f"最小化窗口时出错: {e}")
return False
print("程序运行中...")
time.sleep(2) # 等待2秒,让你有时间切换到VS Code窗口
# 尝试最小化活动窗口
if minimize_active_window():
print("窗口已最小化")
else:
print("无法最小化窗口")
# 读取文件名称和路径
path=fr'D:\{name}'
os.makedirs(path,exist_ok=True)
# 打开第一图
# pyautogui.moveTo(646, 260)
# pyautogui.click()
# time.sleep(5)D:\20251003钥匙\089
# 预设照片数量D:\20250630手套\103
for i in range(num,num+300):
# 下载按钮
pyautogui.moveTo(1569, 302)
pyautogui.click()
time.sleep(1)
# 点击有,无水印要包月
pyautogui.moveTo(1573, 373)
pyautogui.click()
time.sleep(2)
# 输入图片名称,复制中文内容到剪贴板
name=path+fr'\{i:03}'
pyperclip.copy(name)
# 黏贴图片地址
pyautogui.hotkey('ctrl', 'v')
time.sleep(1)
pyautogui.press('enter')
# # 图片显示需要时间
time.sleep(1)
# 模拟按键“右箭头”
pyautogui.moveTo (989, 628)
pyautogui.click()
time.sleep(2)
# 'left'(左箭头)
# 'up'(上箭头)
# 'down'(下箭头)
import sys
import ctypes
import time
def minimize_active_window():
try:
if sys.platform == 'win32':
# 获取当前活动窗口的句柄
hwnd = ctypes.windll.user32.GetForegroundWindow()
# 最小化窗口
ctypes.windll.user32.ShowWindow(hwnd, 6) # 6 对应 SW_MINIMIZE
return True
else:
print("此功能仅支持Windows系统")
return False
except Exception as e:
print(f"最小化窗口时出错: {e}")
return False
print("程序运行中...")
time.sleep(2) # 等待2秒,让你有时间切换到VS Code窗口
# 尝试最小化活动窗口
if minimize_active_window():
print("窗口已最小化")
else:
print("无法最小化窗口")

分类

挑选一些垂直图片

用代码处理背景颜色(透明背景)切掉四边空白。
'''
把手机二维码背景透明,去掉白边,最大化
AI对话大师,阿夏
2025年10月10日
'''
import os
from PIL import Image
import numpy as np
def crop_transparent_edges(image, margin=10):
"""
裁剪掉图片的透明边缘,并保留指定的间距
参数:
image: PIL Image对象(RGBA模式)
margin: 要保留的间距(磅/像素)
返回:
裁剪后的PIL Image对象
"""
# 转换为numpy数组
data = np.array(image)
# 获取alpha通道
alpha = data[:, :, 3]
# 找到非透明像素的位置
non_transparent = np.where(alpha > 0)
if len(non_transparent[0]) == 0:
# 如果全是透明像素,返回原图
return image
# 获取非透明区域的边界
top = np.min(non_transparent[0])
bottom = np.max(non_transparent[0])
left = np.min(non_transparent[1])
right = np.max(non_transparent[1])
# 添加间距
top = max(0, top - margin)
bottom = min(image.height - 1, bottom + margin)
left = max(0, left - margin)
right = min(image.width - 1, right + margin)
# 裁剪图片
cropped_image = image.crop((left, top, right + 1, bottom + 1))
return cropped_image
def make_background_transparent(image_path, output_path, tolerance=30, margin=10):
"""
将图片背景变为透明并裁剪透明边缘
参数:
image_path: 输入图片路径
output_path: 输出图片路径
tolerance: 颜色容差,控制背景识别的灵敏度
margin: 裁剪后保留的间距(磅/像素)
"""
# 打开图片并转换为RGBA模式
with Image.open(image_path) as img:
# 如果图片不是RGBA模式,转换为RGBA
if img.mode != 'RGBA':
img = img.convert('RGBA')
# 获取图片数据
data = np.array(img)
red, green, blue, alpha = data.T
# 获取左上角像素作为背景色参考(假设图片左上角是背景色)
bg_color = (red[0, 0], green[0, 0], blue[0, 0])
# 创建背景掩码:判断像素是否在背景色容差范围内
mask = (
(red >= bg_color[0] - tolerance) & (red <= bg_color[0] + tolerance) &
(green >= bg_color[1] - tolerance) & (green <= bg_color[1] + tolerance) &
(blue >= bg_color[2] - tolerance) & (blue <= bg_color[2] + tolerance)
)
# 将背景像素的alpha通道设为0(透明)
data[mask.T] = (0, 0, 0, 0)
# 转换回Image
result = Image.fromarray(data)
# 裁剪透明边缘并保留间距
cropped_result = crop_transparent_edges(result, margin)
# 保存结果
cropped_result.save(output_path, 'PNG')
def batch_process_images(input_dir, output_dir, tolerance=30, margin=10):
"""
批量处理文件夹中的所有图片
参数:
input_dir: 输入文件夹路径
output_dir: 输出文件夹路径
tolerance: 颜色容差
margin: 裁剪后保留的间距(磅/像素)
"""
# 创建输出文件夹(如果不存在)
os.makedirs(output_dir, exist_ok=True)
# 支持的图片格式
supported_formats = ('.png', '.jpg', '.jpeg', '.gif', '.bmp')
# 遍历输入文件夹中的所有文件
for filename in os.listdir(input_dir):
# 检查文件是否为支持的图片格式
if filename.lower().endswith(supported_formats):
input_path = os.path.join(input_dir, filename)
# 构建输出文件路径,统一保存为PNG格式以支持透明
output_filename = os.path.splitext(filename)[0] + '.png'
output_path = os.path.join(output_dir, output_filename)
try:
make_background_transparent(input_path, output_path, tolerance, margin)
print(f"已处理: {filename} -> {output_filename}")
except Exception as e:
print(f"处理 {filename} 时出错: {str(e)}")
if __name__ == "__main__":
# 输入文件夹(123)
path = r'D:\20251009手机二维码\要'
a = '00原图'
input_directory = path + fr'\{a}'
# 输出文件夹(processed)
output_directory = os.path.join(path, f"{a}透明裁剪")
# 检查输入文件夹是否存在
if not os.path.exists(input_directory):
print(f"错误: 文件夹 '{input_directory}' 不存在")
else:
# 执行批量处理
# tolerance: 背景识别容差(可根据需要调整)
# margin: 保留的间距,这里设为10磅/像素
batch_process_images(input_directory, output_directory, tolerance=30, margin=10)
print("批量处理完成!处理后的图片保存在输出文件夹中")
把手机背景变成透明色,切掉白边,图案最大化

对比玩具手机大小,A4一页可以做10个小手机


代码展示
'''
把手机二维码做成一页10张
AI对话大师,阿夏
2025年10月10日
'''
import random
import math
from PIL import Image, ImageDraw, ImageFont
import os
# 测试图片59张
# f=['男','女']
path=r'D:\20251009手机二维码\要'
# 格子一共有几个
sl=10
# z=102
# 范例图纸
# for x in f:
names=f'00原图透明裁剪'
# names='02女孩30张抠图'
input_path=path+fr'\{names}'
mb='手机'
# 表格有3列
L=5
# 高度是多少厘米
h=9.
w=5.5
file_paths = [os.path.join(input_path, file) for file in os.listdir(input_path) if file.endswith('.png')]
# 16:9图只有51张,所以总部需要102张,4:3图需要102张
grouped_files= [file_paths[i:i+sl] for i in range(0, len(file_paths),sl)]
print(grouped_files)
print('----1图模版:正方1+长方横16:9乘以2-,第2张横图水平翻转--')
# 切割4分一组
# 制作word
import os
from docx import Document
import os,time
from docx import Document
from docx.shared import Cm
from docx2pdf import convert
from PyPDF2 import PdfMerger
import shutil
from datetime import datetime
from PIL import Image
# 假设 pic_list_six1 是一个包含图片路径的列表
# 创建临时文件夹
new_folder = path+r'\零时文件夹'
os.makedirs(new_folder, exist_ok=True)
print('----3、插入docx,制作pdf------------')
# 处理每一组图片
for group_index, group in enumerate(grouped_files):
# 创建新的Word文档
doc = Document(path+fr'\{mb}.docx')
# print(group)
# 遍历每个单元格,并插入图片
for cell_index, image_file in enumerate(group):
# 计算图片长宽(单位:厘米)
# 如果是空格,就跳过
if not image_file:
continue
# 插入图片到单元格
table = doc.tables[0]
cell = table.cell(int(cell_index / L), cell_index % L)
# 如果第一行有2个格子,两个数字都写2
cell_paragraph = cell.paragraphs[0]
cell_paragraph.clear()
run = cell_paragraph.add_run()
run.add_picture(image_file, height=Cm(h),width=Cm(w))
# 保存Word文档
doc.save(os.path.join(new_folder, f'{group_index + 1:03d}.docx'))
# 将10个docx转为PDF
import os
from docx2pdf import convert
from PyPDF2 import PdfFileMerger
pdf_output_path = path+fr'\\{mb[:2]}{names[2:4]}{mb}(A4一页{sl}张)共{int(len(file_paths))}图.pdf'
# 将所有DOCX文件转换为PDF
for docx_file in os.listdir(new_folder):
if docx_file.endswith('.docx'):
docx_path = os.path.join(new_folder, docx_file)
convert(docx_path, docx_path.replace('.docx', '.pdf'))
time.sleep(2)
# 合并零时文件里所有PDF文件
merger = PdfFileMerger()
for pdf_file in os.listdir(new_folder):
if pdf_file.endswith('.pdf'):
pdf_path = os.path.join(new_folder, pdf_file)
merger.append(pdf_path)
time.sleep(2)
# 保存合并后的PDF文件
merger.write(pdf_output_path)
merger.close()
# 删除输出文件夹
shutil.rmtree(new_folder)
time.sleep(2)

所有手机都变成一样大的




打印效果
200G卡纸








剪切和圆角





涂色要求
1、二维码部分不涂色
2、正面不能涂黑色、可以多种颜色(很多孩子就用了范例的绿色和黄色)
3、反面随便涂色

小朋友们涂色
20251011 小2班 21人


































作品拍照和分析
手机正面
1、12位幼儿尝试避开“二维码”区域(没有涂色)
2、6位幼儿涂了“二维码区域”(两种颜色、一种颜色)
3、3位幼儿不理解,没有涂色或者线条涂鸦

手机反面(空白)
1、7位幼儿涂色同色
2、1位幼儿涂色多色(混色)
3、8位幼儿涂色单色线条或短线条(没有涂满)
4、3位幼儿未涂色

塑封和使用
购买的塑料二维码手机有厚度,这个纸片手机没有厚度,拿起来不便利。考虑后面贴一点KT版、或者打洞串线挂在脖子上。

