背景需求
小班小朋友的桌子上要有水果贴图,便于幼儿分批去完成生活任务,苹果队小朋友喝水,香蕉队去上厕所、樱桃队去拿挂牌。
因为分园没有彩色打印机,所以我需要下载卡通黑白简笔画无色图片。
操作过程
打开通义万相,选了今天的免费分,发现有50分!
又改版了,不是每天10分了,一天50分,顿时感觉自己好富裕。
一、Q版立体彩色水果
我比较喜欢Q版风格,做了出了有立体感的香蕉水果。
关键词:填色卡风格,一串香蕉,卡通简笔画,(万相2.1专业,Q版风格)
关键词:白色背景,填色卡风格,一串香蕉,卡通简笔画,(万相2.1专业,Q版风格)
虽然以上图片很好看,我真希望能直接打印。
可惜分园没有彩色打印机。必须改成黑白简笔画线条,打印在彩色A4或彩色手工纸上。
二、Q版立体黑白线条水果
关键词:纯白色背景,卡通简笔画,一只香蕉,,简单笔画,卡通,加粗黑白轮廓线,无色,幼儿插图,线条画,黑白漫画线条艺术:,线描,粗轮廓,清晰的线条,矢量线。简单,大,(万相2.1专业,Q版风格)
这里面的立体感很强,我担心打印后黑白灰的颜色太多,会遮挡住彩色纸张的的颜色。
三、通用模式
关键词:纯白色背景,卡通简笔画,一只苹果,简单笔画,卡通,加粗黑白轮廓线,无色,幼儿插图,线条画,黑白漫画线条艺术:,线描,粗轮廓,清晰的线条,矢量线。简单,大,(万相2.2专业)
这些图片都有卡通眼睛,我不需要。把关键词里面的“卡通简笔画”删掉“卡通”
关键词:纯白色背景,简笔画,一只西瓜,简单笔画,卡通,加粗黑白轮廓线,无色,幼儿插图,线条画,黑白漫画线条艺术:,线描,粗轮廓,清晰的线条,矢量线。简单,大,
这个西瓜效果不错。但是同样改成苹果,就变成彩色
再替换成橘子,又有卡通眼睛了。但恢复了黑白线条
这组关键词效果不稳定。
彻底删除里面的所有卡通字样
关键词:纯白色背景,简笔画,一只无色桔子,简单笔画,加粗黑白轮廓线,无色,幼儿插图,线条画,黑白漫画线条艺术:,线描,粗轮廓,清晰的线条,矢量线。简单,大,
香蕉的线描效果不错
最后选用这个关键词,生成多次,直到满意。
纯白色背景,简笔画,一串大葡萄,简单笔画,卡通,加粗黑白轮廓线,无色,幼儿插图,线条画,黑白漫画线条艺术:,线描,粗轮廓,清晰的线条,矢量线。简单,大,
桔子总是不满意,但是多生成几次,总会遇到相对满意的图案。
三、下载和整理图片
因为今天了VIP限免的Q版模型,所以只能下载“有水印”图片
'''
20250802通义万相2.2下载通义照片 copy
Python下载通义万相的图片(存在问题,不能停止,只能默认下载300张,删除多余)
星火讯飞,阿夏
150%
20250830
'''
import os,time
import pyautogui
import pyperclip
import re
import win32api
import win32con
import sys
import ctypes
import time
name='20250807莲花'
# 先打开微信
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:20250630手套103
for i in range(num,num+400):
# 下载按钮
pyautogui.moveTo(1651, 250)
# pyautogui.click()
time.sleep(1)
# 点击有,无水印要包月
pyautogui.moveTo(1655, 305)
pyautogui.click()
time.sleep(4)
# 输入图片名称,复制中文内容到剪贴板
name=path+fr'{i:03}'
pyperclip.copy(name)
# 黏贴图片地址
pyautogui.hotkey('ctrl', 'v')
time.sleep(1)
pyautogui.press('enter')
# # 图片显示需要时间
time.sleep(1)
# 模拟按键“右箭头”
pyautogui.moveTo (1223, 618)
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("无法最小化窗口")
图片下载后分类整理
我只要黑白简笔画的
这些图片都有灰色背景,所以要清除背景颜色转为黑白色。
挑选5种水果各一张图(苹果橘子的边线明显比另外三种水果粗)图案有白边,需要切掉。
'''
04(合并单个文件夹)将通义万相黑白简笔画填充黑白蓝色 copy
图片处理流程:
1. 将图片转为纯黑白图(黑色0,0,0和白色255,255,255)
2. 将图片转为黑蓝图(黑色0,0,0和蓝色0,255,255)
3. 识别边缘与黑线,中间填充白色(提供两种填充方法)
3. 切边(保留10磅/13像素边距)、统一大小(原比例统一,不是每张图片一样大)、透明图处理
deepseek,阿夏
20250830
'''
import time
from PIL import Image
import os
from datetime import datetime
from collections import deque
def create_folder(path):
"""创建文件夹如果不存在"""
if not os.path.exists(path):
os.makedirs(path)
print(f"创建文件夹: {path}")
def process_image_to_bw(image_path, output_folder, threshold=128):
"""将图片转为纯黑白图(黑色0,0,0和白色255,255,255)"""
try:
img = Image.open(image_path)
img = img.convert('L') # 转为灰度图
# 二值化处理
binary_img = img.point(lambda x: 0 if x < threshold else 255, '1')
binary_img = binary_img.convert('RGB') # 转回RGB模式
# 保存结果
filename = os.path.basename(image_path)
output_path = os.path.join(output_folder, filename)
binary_img.save(output_path)
print(f"黑白图生成: {filename} -> 已保存到 {output_path}")
return output_path
except Exception as e:
print(f"处理图片 {image_path} 时出错: {str(e)}")
return None
def process_image_to_blue_black(image_path, output_folder, threshold=128):
"""将图片转为黑蓝两色(黑色0,0,0和蓝色0,255,255)"""
try:
img = Image.open(image_path)
img = img.convert('RGB') # 确保是RGB模式
pixels = img.load()
width, height = img.size
for y in range(height):
for x in range(width):
r, g, b = pixels[x, y]
gray = (r + g + b) / 3
if gray < threshold:
pixels[x, y] = (0, 0, 0) # 黑色
else:
# pixels[x, y] = (0, 255, 255) # 蓝色
pixels[x, y] = (255, 255, 255) # 蓝色
# 保存结果
filename = os.path.basename(image_path)
output_path = os.path.join(output_folder, filename)
img.save(output_path)
print(f"黑蓝图生成: {filename} -> 已保存到 {output_path}")
return output_path
except Exception as e:
print(f"处理图片 {image_path} 时出错: {str(e)}")
return None
def vertical_fill_white(image):
"""垂直填充白色(顺时针方向)"""
img = image.convert("RGB")
pixels = img.load()
width, height = img.size
# 上→右→下→左 顺时针填充
# 从上边向下填充
for x in range(width):
for y in range(height):
if pixels[x, y] == (0, 0, 0):
break
pixels[x, y] = (255, 255, 255)
# 从右边向左填充
for y in range(height):
for x in range(width-1, -1, -1):
if pixels[x, y] == (0, 0, 0):
break
pixels[x, y] = (255, 255, 255)
# 从下边向上填充
for x in range(width):
for y in range(height-1, -1, -1):
if pixels[x, y] == (0, 0, 0):
break
pixels[x, y] = (255, 255, 255)
# 从左边向右填充
for y in range(height):
for x in range(width):
if pixels[x, y] == (0, 0, 0):
break
pixels[x, y] = (255, 255, 255)
return img
def flood_fill_white(image):
"""洪水填充算法填充白色"""
img = image.convert("RGB")
pixels = img.load()
width, height = img.size
visited = set()
# 从四个角开始填充
corners = [(0,0), (width-1,0), (width-1,height-1), (0,height-1)]
for start_x, start_y in corners:
if pixels[start_x, start_y] == (0, 0, 0) or (start_x, start_y) in visited:
continue
queue = deque()
queue.append((start_x, start_y))
visited.add((start_x, start_y))
while queue:
x, y = queue.popleft()
pixels[x, y] = (255, 255, 255)
# 检查四个方向的相邻像素
for dx, dy in [(0,1), (1,0), (0,-1), (-1,0)]:
nx, ny = x + dx, y + dy
if 0 <= nx < width and 0 <= ny < height:
if (nx, ny) not in visited and pixels[nx, ny] != (0, 0, 0):
visited.add((nx, ny))
queue.append((nx, ny))
return img
def find_content_boundary(image):
"""找到内容边界(非白色区域)"""
width, height = image.size
left, right, top, bottom = width, 0, height, 0
for y in range(height):
for x in range(width):
r, g, b = image.getpixel((x, y))
if (r, g, b) != (255, 255, 255): # 非白色像素
if x < left: left = x
if x > right: right = x
if y < top: top = y
if y > bottom: bottom = y
return left, right, top, bottom
def crop_with_margin(image, boundary, margin=13):
"""带边缘裁剪图像(10磅≈13像素)"""
left, right, top, bottom = boundary
return image.crop((
max(0, left - margin),
max(0, top - margin),
min(image.width, right + 1 + margin),
min(image.height, bottom + 1 + margin)
))
def resize_to_max(image, max_size):
"""按最大尺寸等比例调整大小"""
img = image.copy()
img.thumbnail(max_size, Image.LANCZOS)
return img
def make_white_transparent(image):
"""将白色转为透明"""
img = image.convert("RGBA")
data = img.getdata()
new_data = []
for item in data:
# 白色或接近白色都转为透明
if item[0] > 240 and item[1] > 240 and item[2] > 240:
new_data.append((255, 255, 255, 0))
else:
new_data.append(item)
img.putdata(new_data)
return img
def process_complete_flow():
# 记录开始时间
start_time = time.time()
start_datetime = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
# 设置路径
base_path = r'D:20250830 桌面水果标志简笔画挑选'
folders = {
'input': os.path.join(base_path, '00原图'),
'bw': os.path.join(base_path, '01黑白图'),
'blue_black': os.path.join(base_path, '02黑蓝图'),
'filled': os.path.join(base_path, '03黑白蓝图'),
'cropped': os.path.join(base_path, '04切边图'),
'resized': os.path.join(base_path, '05统一图'),
'transparent': os.path.join(base_path, '06透明图')
}
# 创建所有输出文件夹
for folder in folders.values():
create_folder(folder)
# 处理参数
threshold = 128 # 二值化阈值
margin = 0 # 10磅≈13像素的边距
max_size = (622, 877) # 统一尺寸
fill_method = 'flood' # 'vertical' 或 'flood'
# 支持的图片格式
valid_exts = ('.jpg', '.jpeg', '.png', '.bmp', '.gif')
# 处理每张图片
for filename in os.listdir(folders['input']):
if not filename.lower().endswith(valid_exts):
continue
try:
print(f"
处理文件: {filename}")
# 1. 原始图片路径
input_path = os.path.join(folders['input'], filename)
# 2. 生成纯黑白图
bw_path = process_image_to_bw(input_path, folders['bw'], threshold)
if not bw_path:
continue
# 3. 生成黑蓝图
blue_black_path = process_image_to_blue_black(
input_path, folders['blue_black'], threshold)
if not blue_black_path:
continue
# 4. 填充白色背景
image = Image.open(blue_black_path)
if fill_method == 'flood':
filled = flood_fill_white(image)
print("使用洪水填充算法")
else:
filled = vertical_fill_white(image)
print("使用垂直填充算法")
# 保存黑白蓝图
filled_path = os.path.join(folders['filled'], filename)
filled.save(filled_path)
print(f"黑白蓝图保存: {filled_path}")
# 5. 切边处理(保留10磅边距)
boundary = find_content_boundary(filled)
cropped = crop_with_margin(filled, boundary, margin)
cropped_path = os.path.join(folders['cropped'], filename)
cropped.save(cropped_path)
print(f"切边图保存: {cropped_path}")
# 6. 统一大小
resized = resize_to_max(cropped, max_size)
resized_path = os.path.join(folders['resized'], filename)
resized.save(resized_path)
print(f"统一大小图保存: {resized_path}")
# 7. 制作透明图
transparent = make_white_transparent(resized)
transparent_path = os.path.join(folders['transparent'], filename)
transparent.save(transparent_path, quality=100)
print(f"透明图保存: {transparent_path}")
except Exception as e:
print(f"处理 {filename} 时出错: {str(e)}")
# 记录结束时间并打印统计信息
end_time = time.time()
end_datetime = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
total_seconds = end_time - start_time
minutes = int(total_seconds // 60)
seconds = int(total_seconds % 60)
print("
" + "="*50)
print(f"程序开始时间: {start_datetime}")
print(f"程序结束时间: {end_datetime}")
print(f"总用时: {minutes}分{seconds}秒")
print(f"共计: {total_seconds:.2f}秒")
print("="*50)
print("所有图片处理完成!")
if __name__ == "__main__":
process_complete_flow()
本次要的是黑白图,所以把黑白蓝的代码微调,蓝色部分都改成白色
从原图里变出很多文件夹(图片处理过程)
统一图里面图片大小也不统一。
最后把透明图的水果复制到A4(因为只有5张,我就新建一个word,然后手动黏贴了)
四、继续生成Q版水果
虽然没有用上Q版水果图片(彩色立体渐变),但我还是很喜欢鲜艳的色彩和立体感。所以继续用关键词生成更多的水果
关键词:白色背景,填色卡风格,一只生梨,卡通简笔画,(Q版线描,万相2.1专业)
但是做“木瓜”感觉它像西瓜
反复测试后,变出无色的、动物的造型。
尝试加上水果字样,
关键词:“白色背景,填色卡风格,一只青提(水果),卡通简笔画”“
有些水果还是默认不了(山竹、龙岩、莲雾、蛇皮果)
菠萝蜜和菠萝一样
从里面选好看的、逼真的、常见的水果。作为学具制作的素材(演示文稿PPTX、水果数独图片等)
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...