【教学类-161-02】20260417豆包图片32种风格展示02(人物照做参考图)
背景需求之前制作了“滑梯”照片的32种风格【教学类-161-01】20260416豆包图片32种风格展示01环境照做参考图https://mp.csdn.net/mp_blog/creation/editor/160180837现在我想做人像的32种风格隐私考虑用豆包生成虚拟人物这张做参考图用程序下载豆包图片 20251226豆包图片批量下载 先点开一张图放大 需要等10秒图片边高清再下载 点击下一页 Python下载通义万相的图片存在问题不能停止只能默认下载300张删除多余 星火讯飞阿夏 谷歌页面打开通义万相页面放大到200% 20251226 import os,time import pyautogui import pyperclip import re import win32api import win32con import sys import ctypes import time name图片 # 先打开微信 num1 zs40 # 实际157D:\20251211实心福字\00原图\061 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(无法最小化窗口) # 读取文件名称和路径 pathfrD:\test\20桌面素材\20260416 32种豆包图片风格头像照\{name} os.makedirs(path,exist_okTrue) for i in range(num,numzs): # 等候10秒高清图片显示 time.sleep(10) # 下载按钮 pyautogui.moveTo(1801, 154) pyautogui.click() time.sleep(10) # 输入图片名称复制中文内容到剪贴板 namepathfr\{i:03} pyperclip.copy(name) # 黏贴图片地址 pyautogui.hotkey(ctrl, v) time.sleep(2) pyautogui.press(enter) # # 图片显示需要时间 time.sleep(2) # 模拟按键“右箭头” pyautogui.moveTo (1864, 583) # pyautogui.moveTo (989, 641) pyautogui.click() time.sleep(2) # 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(无法最小化窗口)读取“滑梯32图”的文件名把人像照片的文件名改成“001 人像摄影”并在图片下方插入“风格文字”图片上的文字要调整图片名称里面加入“豆包图片风格” 豆包肖像图片32种风格图片上添加风格名称和序号缩小80% 功能 1. 从name_folder读取图片文件名作为新名称 2. 将input_folder中的图片按顺序重命名 3. 在图片底部中点添加文字风格名称和序号 Deepseek阿夏 20260416 import os from PIL import Image, ImageDraw, ImageFont # 配置路径 path1 rD:\test\20桌面素材\20260415 32种豆包图片风格滑滑梯 path rD:\test\20桌面素材\20260416 32种豆包图片风格头像照 input_folder path r\00原图 # 原始图片文件夹需要重命名的图片 name_folder path1 r\\01文字 # 存放名字图片的文件夹用于读取新名称 output_folder path r\01文字 # 输出文件夹 # 创建输出文件夹如果不存在 os.makedirs(output_folder, exist_okTrue) # 图片尺寸统一调整为这个尺寸 target_size (1773, 2364) # 文字相关设置 font_size 100 # 字体大小 margin_bottom 100 # 底部边距距离底部的像素距离 # 缩小比例原尺寸的70% scale_factor 0.75 # 颜色设置 text_color (255, 255, 255) # 白色文字 shadow_color (0, 0, 0) # 黑色阴影 # bg_color (0, 0, 0, 128) # 半透明黑色背景RGBA bg_color (0, 0, 0, 255) # 半透明黑色背景RGBA def get_name_list_from_folder(folder): 从文件夹读取所有图片文件名不含扩展名并排序 name_list [] for filename in os.listdir(folder): if filename.lower().endswith((.png, .jpg, .jpeg, .bmp, .tiff)): name_without_ext os.path.splitext(filename)[0] name_list.append(name_without_ext) name_list.sort() # 排序确保顺序一致 return name_list def add_text_bottom_center(img, text, font_size80, margin_bottom150): 在图片底部中点添加带阴影和背景的文字 # 创建一个可编辑的图片副本如果是RGBA模式确保有alpha通道 if img.mode ! RGBA: img img.convert(RGBA) draw ImageDraw.Draw(img) # 设置字体 try: # Windows系统常用黑体路径 font ImageFont.truetype(simhei.ttf, font_size) except: try: # macOS系统 font ImageFont.truetype(/System/Library/Fonts/PingFang.ttc, font_size) except: try: # Linux系统 font ImageFont.truetype(/usr/share/fonts/truetype/droid/DroidSansFallbackFull.ttf, font_size) except: # 如果找不到使用默认字体 font ImageFont.load_default() print(警告未找到中文字体使用默认字体) # 获取文字边界框 bbox draw.textbbox((0, 0), text, fontfont) text_width bbox[2] - bbox[0] text_height bbox[3] - bbox[1] # 计算底部中点位置 img_width, img_height img.size text_x (img_width - text_width) // 2 text_y img_height - margin_bottom - text_height # 添加半透明背景 padding 30 bg_x1 text_x - padding bg_y1 text_y - padding bg_x2 text_x text_width padding bg_y2 text_y text_height padding # 绘制半透明黑色背景矩形 overlay Image.new(RGBA, img.size, (0, 0, 0, 0)) overlay_draw ImageDraw.Draw(overlay) overlay_draw.rectangle([bg_x1, bg_y1, bg_x2, bg_y2], fillbg_color) img Image.alpha_composite(img, overlay) draw ImageDraw.Draw(img) # 绘制文字阴影偏移2像素 draw.text((text_x 2, text_y 2), text, fontfont, fillshadow_color) # 绘制主文字 draw.text((text_x, text_y), text, fontfont, filltext_color) return img def process_text(name_without_ext, index): 处理文字格式 index: 图片索引从0开始 第一张图片index0不添加豆包图片风格 其他图片在第一个空格后添加豆包图片风格 if index 0: # 第一张图片直接返回原名称 text name_without_ext print(f第一张图片不添加风格文字{text}) else: # 其他图片以空格为拆分点在中间添加豆包图片风格 if in name_without_ext: # 找到第一个空格的位置 parts name_without_ext.split( , 1) # 在空格位置插入豆包图片风格 text f{parts[0]} 豆包图片风格{parts[1]} else: # 如果没有空格直接在前面添加 text f豆包图片风格{name_without_ext} print(f第{index1}张图片添加风格文字{name_without_ext} - {text}) return text def main(): # 1. 从name_folder读取所有新名称 print(正在读取名称文件夹...) name_list get_name_list_from_folder(name_folder) print(f找到 {len(name_list)} 个名称文件) for i, name in enumerate(name_list): print(f {i1}. {name}) # 2. 获取input_folder中的所有图片 print(\n正在读取原始图片文件夹...) image_files [] for filename in os.listdir(input_folder): if filename.lower().endswith((.png, .jpg, .jpeg, .bmp, .tiff)): image_files.append(filename) image_files.sort() # 排序确保顺序一致 print(f找到 {len(image_files)} 张原始图片) # 检查数量是否匹配 if len(image_files) ! len(name_list): print(f\n警告名称数量({len(name_list)})与图片数量({len(image_files)})不匹配) print(将以较少的数量为准进行处理) min_count min(len(image_files), len(name_list)) else: min_count len(image_files) # 3. 处理每一张图片 print(\n开始处理图片...) for i in range(min_count): old_filename image_files[i] base_name name_list[i] # 处理文字格式根据是否为第一张图片 if i 0: # 第一张图片只显示序号和名称不添加豆包图片风格 text f{base_name} else: # 其他图片先处理名称添加豆包图片风格再加上序号 processed_name process_text(base_name, i) text f{processed_name} # 打开原始图片 img_path os.path.join(input_folder, old_filename) img Image.open(img_path) # 调整图片大小为统一尺寸 if img.size ! target_size: img img.resize(target_size, Image.Resampling.LANCZOS) # 在底部中点添加文字 img_with_text add_text_bottom_center(img, text, font_size, margin_bottom) # 等比例缩小图片 new_size (int(img_with_text.width * scale_factor), int(img_with_text.height * scale_factor)) img_resized img_with_text.resize(new_size, Image.Resampling.LANCZOS) # 转换回RGB模式保存去掉alpha通道 if img_resized.mode RGBA: # 创建白色背景 rgb_img Image.new(RGB, img_resized.size, (255, 255, 255)) rgb_img.paste(img_resized, maskimg_resized.split()[3]) # 使用alpha通道作为蒙版 img_resized rgb_img # 保存图片使用新名称 output_path os.path.join(output_folder, f{base_name}.png) img_resized.save(output_path) print(f[{i1}/{min_count}] {old_filename} - {base_name}.png (已添加文字{text})) print(f\n处理完成共处理 {min_count} 张图片) print(f输出文件夹{output_folder}) if __name__ __main__: main()肖像参考图32种风格效果制作GIF风格原图大小缩小1/3缩小1/4报错改成整数我希望正好5MB所以还是做等比例 豆包32种风格图片做成GIF考虑等比例缩放 Deepseek阿夏 20260416 from PIL import Image import os import sys def get_float_input(prompt, default0.5): while True: try: user_input input(prompt) if user_input.strip() : print(f使用默认值: {default}秒) return default return float(user_input) except: print(输入无效请输入数字) def get_folder_name(prompt, base_path): while True: folder_name input(prompt).strip() if folder_name : sys.exit(0) full_path os.path.join(base_path, folder_name) if os.path.exists(full_path): return folder_name else: print(f文件夹不存在{folder_name}请重新输入) def create_gif_from_images(folder_path, output_gif, target_sizeNone, interval0.5): 从文件夹中的图片创建GIF 参数: folder_path: 图片文件夹路径 output_gif: 输出GIF文件路径 target_size: 目标尺寸宽度, 高度默认为None不调整大小 interval: 帧间隔时间秒 valid_extensions (.jpg, .jpeg, .png, .bmp, .tiff) image_files [] for file in sorted(os.listdir(folder_path)): if file.lower().endswith(valid_extensions): image_files.append(os.path.join(folder_path, file)) if not image_files: print(❌ 没有找到图片) return False print(f 找到 {len(image_files)} 张图片) # 处理所有图片 frames [] for i, img_path in enumerate(image_files): with Image.open(img_path) as img: # 强制转RGB new_img img.convert(RGB) # 如果指定了目标尺寸进行缩放 if target_size: new_img new_img.resize(target_size, Image.Resampling.LANCZOS) # 复制新对象 frames.append(new_img.copy()) print(f 已加载 [{i1}/{len(image_files)}]: {os.path.basename(img_path)}) # 保存GIF try: with frames[0] as first_frame: first_frame.save( output_gif, save_allTrue, append_imagesframes[1:], durationint(interval * 1000), # 转换为毫秒 loop0, # 0表示无限循环 optimizeFalse # 关闭优化避免bug ) print(f\n✅ GIF 已生成{output_gif}) if target_size: print(f✅ 所有图片统一尺寸{target_size[0]}x{target_size[1]}) print(f✅ 帧间隔{interval}秒) return True except Exception as e: print(f❌ 生成GIF失败{e}) return False def main(): print( 图片转GIF工具 ) base_path rD:\test\20桌面素材\20260416 32种豆包图片风格头像照 if not os.path.exists(base_path): print(f❌ 路径错误{base_path}) input(按回车退出...) return # 获取参数 interval get_float_input(请输入间隔秒数默认0.5秒, 0.5) folder_name get_folder_name(请输入文件夹名称直接回车退出, base_path) # 构建路径 input_folder os.path.join(base_path, folder_name) output_file os.path.join(input_folder, f{folder_name}.gif) # 设置目标尺寸 a 1329 b 1773 s0.8 target_size (int(a * s), int(b * s)) # 缩小到80% print(f\n 输入文件夹{input_folder}) print(f 输出文件{output_file}) print(f 目标尺寸{target_size[0]}x{target_size[1]}) print(f⏱️ 帧间隔{interval}秒) print(\n开始处理...\n) # 创建GIF create_gif_from_images( folder_pathinput_folder, output_gifoutput_file, target_sizetarget_size, intervalinterval ) # input(\n✨ 完成按回车退出) if __name__ __main__: main()继续调整比例最接近5MB试试小数点后3位0.311与0.310对比试试小数点后4位差异不大试试小数点后5位都是5.0035.2MB以内也能上传CSDN相似风格的归类风格名称风格1风格2人像摄影电影写真中国风动漫二次元、卡通、儿童绘画3D渲染CG动画、手办赛博朋克水墨画油画莫奈、古典、巴洛克、伦勃朗水彩画彩铅画平面插画锐笔插画、绘本、马蒂斯像素风格抽象荧光绘画、毕加索复古动漫港风动漫风景版画油墨印刷