from PIL import Image,ImageDraw,ImageFont,ImageChops from pathlib import Path root=Path(r'C:\projects\wheel\models\new_motor_corners_2mm_concept') font='C:/Windows/Fonts/msyh.ttc' def F(n):return ImageFont.truetype(font,n) im=Image.new('RGB',(2000,1120),'white');d=ImageDraw.Draw(im) d.text((55,25),'新电机角码与 2 mm 垫片',font=F(40),fill='#183455') d.text((58,85),'角码直接贴电机;垫片夹在角码和 2020 型材之间',font=F(24),fill='#314e65') d.text((60,145),'模型局部(红色为垫片)',font=F(26),fill='#172c43') base=Image.open(root/'单侧角码垫片特写.png').convert('RGB');diff=ImageChops.difference(base,Image.new('RGB',base.size,'white'));b=diff.getbbox();base=base.crop(b);base.thumbnail((930,750));im.paste(base,(35,205)) d.text((1045,145),'接触层叠剖面(示意,非比例)',font=F(26),fill='#172c43') # canvas positions: motor z=0 baseline at y=810, x+ to right, z+ upwards d.rectangle((1050,810,1920,920),fill='#abb4bd',outline='#394b59',width=3) d.text((1370,845),'电机背面',font=F(27),fill='#172c43') # L foot contacts motor, leg extends vertically d.polygon([(1180,790),(1480,790),(1480,345),(1515,345),(1515,810),(1180,810)],fill='#e39c3c',outline='#654a1e') d.text((1190,738),'新角码',font=F(24),fill='#64400b') # Rail with exact nominal corner-side face at x1545, visible spacer between x1515 and1545 d.rectangle((1545,335,1850,810),fill='#71899b',outline='#1d384c',width=3) d.text((1630,490),'2020 型材',font=F(25),fill='white') # washer represented as full y cross section red of thickness 1 mm d.rectangle((1515,510,1545,610),fill='#d82f36',outline='#8c1824',width=2) d.line((1370,560,1650,560),fill='#28303a',width=8) d.rectangle((1370,540,1398,580),fill='#485b69') d.text((1085,350),'2 mm 金属垫片',font=F(26),fill='#bd2029') d.line([(1280,390),(1445,390),(1529,509)],fill='#bd2029',width=4) d.polygon([(1529,509),(1515,491),(1535,496)],fill='#bd2029') d.text((1155,690),'角码贴紧电机',font=F(22),fill='#61400d') d.text((1550,670),'螺丝示意;槽和滑块未建模',font=F(18),fill='#fff') d.text((55,1000),'每个电机角码型材侧垫片总厚 2 mm,共 4 处;电机侧不放垫片。',font=F(25),fill='#173756') d.text((55,1045),'此图用于表达安装方向,未确认实际角码弯曲半径、孔位及五金尺寸。',font=F(21),fill='#b04337') im.save(root/'角码垫片位置_剖面示意.png')