# -*- coding: utf-8 -*- """ GPT-Image-2 + psd-tools 完整流水线 文字提示词 -> 生成图 -> 去白边 -> 自动分层 -> 导出PSD """ import os, requests from openai import OpenAI from PIL import Image, ImageFilter import numpy as np from psd_tools import PSDImage from psd_tools.api.layers import PixelLayer client = OpenAI()# 自动读取 OPENAI_API_KEY def generate_image(prompt, out_path): resp= client.images.generate( model="gpt-image-alpha", prompt=prompt,size="1024x1024", quality="high",response_format="url") url= resp.data[0].url withopen(out_path,'wb') as f: f.write(requests.get(url).content) returnout_path def remove_white_fringe(img_path, tolerance=15): img= Image.open(img_path).convert("RGBA") data= np.array(img) r,g,b,a= data[:,:,0],data[:,:,1],data[:,:,2],data[:,:,3] mask= (r>255-tolerance)&(g>255-tolerance)&(b>255-tolerance)&(a<255) data[mask,3] = 0 out= img_path.replace(".png","_clean.png") Image.fromarray(data).save(out,"PNG") returnout def make_shadow(subject_path, blur=15): img= Image.open(subject_path).convert("RGBA") shadow= Image.new("RGBA", img.size, (0,0,0,120)) shadow.paste(shadow,mask=img.split()[3]) shadow= shadow.filter(ImageFilter.GaussianBlur(blur)) out= subject_path.replace(".png","_shadow.png") shadow.save(out,"PNG") returnout def build_psd(bg, subj, shadow, output="result.psd"): size= Image.open(subj).size psd= PSDImage.new("RGBA", size) forname, path in [('主体',subj),('阴影',shadow),('背景',bg)]: img= Image.open(path).convert("RGBA").resize(size,Image.LANCZOS) psd.append(PixelLayer.frompil(img,psd, name=name)) psd.save(output) print(f"PSDdone -> {output}") if __name__ == "__main__": subj= generate_image("香水透明玻璃瓶 白色大理石 柔光","subject.png") bg=generate_image("白色大理石纹理背景 高端感","background.png") clean=remove_white_fringe(subj) shadow= make_shadow(clean) build_psd(bg,clean, shadow, "product.psd") |