【教学类-76-01】卡通人物抠图(去头)黏贴孩子大头照(五种尺寸大小)
背景需求:
小红书上有一套幼儿卡通人物抠图(头部贴幼儿头像照),用来做集体照、个人照、插卡等
我在通义万相里面用一个线描插画的风格做了一堆男孩女孩正面卡通图
下载后剔除不符合要求的(三条腿、手指太多等)
保留一些符合标准的图片
用UIBOT和PS抠图(把背景变成纯白色)
每种颜色衣服的人物选一个(四图选一)一共30张
切白边:用UIBOT将白色边切掉(不要周围的白色)并转为GIF透明图片
以最大尺寸图片统一大小,部分图案变形(所以不使用统一图)
只使用切边图(每张图都不一样)
用PS擦除头部图案
女孩图也用同样方法做成切边图
我想根据A4大小纸,制作不同大小的人物贴图
素材准备
经过反复测试,做了一个5模版的合并版代码
代码展示
'''
卡通人物没有头(5种模版合并生成),把幼儿头像照片PS上去
通义万相,星火讯飞,阿夏
2024年11月09日
'''
import random
import math
from PIL import Image, ImageDraw, ImageFont
import os
# 测试图片59张
f=['男','女']
# 4个模版
# 格子一共有几个
sl=[1,2,4,8,9]
# 表格有2列
L=[1,2,2,4,3,]
# 高度是多少厘米
h=['23.74','16.5','12.1','8.75','7.4']
t=['01(28.76乘19.76)','02(19.5乘14.2)','04(14.1乘9.8)','08(9.75乘7.1)','09(9.4乘6.5)']
path=r'C:\Users\jg2yXRZ\OneDrive\桌面\20241106人物扣图'
# 范例图纸
n=0
for y in range(len(sl)):
for x in f:
names=f'02{x}孩30张抠图'
input_path=path+fr'\{names}'
mb=t[n]
# '02(19.5乘14.2)'
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+int(sl[n])] for i in range(0, len(file_paths),int(sl[n]))]
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]
LL=int(L[n])
cell = table.cell(int(cell_index / LL), cell_index % LL)
# 如果第一行有2个格子,两个数字都写2
cell_paragraph = cell.paragraphs[0]
cell_paragraph.clear()
run = cell_paragraph.add_run()
run.add_picture(image_file, height=Cm(float(h[n])))
# 保存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
end=f'{mb[:2]}{names[2:4]}{mb}(A4一页{sl[n]}张)共{int(len(file_paths))}图.pdf'
end1=f'{mb[:2]}{names[2:4]}{mb}(A4一页{sl[n]}张)'
ee=path+r'\10汇总'
os.makedirs(ee,exist_ok=True)
end_path=ee+fr'\{end[:-4]}'
os.makedirs(end_path,exist_ok=True)
pdf_output_path = end_path+fr'\\{mb[:2]}{names[2:4]}头像抠图{mb}(A4一页{sl[n]}张)共{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(3)
# 合并零时文件里所有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(3)
# 保存合并后的PDF文件
merger.write(pdf_output_path)
merger.close()
time.sleep(5)
# 删除输出文件夹
shutil.rmtree(new_folder)
time.sleep(2)
# 逐页将PDF文件转换为PNG图片
import os
from docx import Document
from docx.shared import Pt
from pdf2image import convert_from_path
import shutil
import fitz # PyMuPDF
from PIL import Image
# 遍历123文件夹下的所有.pdf文件
for file_name in os.listdir(end_path):
if file_name.endswith('.pdf'):
file_path = os.path.join(end_path, file_name)
# 打开PDF文件
pdf_document = fitz.open(file_path)
new_path=end_path+fr'\(A4修图){end[:-4]}'
os.makedirs(new_path,exist_ok=True)
# 逐页将PDF文件转换为PNG图片
for page_num in range(pdf_document.page_count):
page = pdf_document[page_num]
image_list = page.get_pixmap()
# 保存为PNG图片
image = Image.frombytes("RGB", [image_list.width, image_list.height], image_list.samples)
image.save(new_path+f"\{end1} {page_num+1:02}.png")
pdf_document.close()
# 定义要打包的文件夹名称
shutil.make_archive(end_path, 'zip', end_path)
n+=1
虽然只有30张图片,但是因为做5个模版(男和女)所以,生成时间达到30分钟。
生成结果放在10汇总文件夹里
里面有文件夹(查看用)和打包文件(便于网盘发送)
同理可得,A4一页容纳的人物数量越来越多
以下是女孩30张的五款A4图。
操作方法
原文地址:https://blog.csdn.net/reasonsummer/article/details/143639399
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!