thinkphp项目中生成ai插画需配置api密钥、封装模型类处理prompt清洗与认证请求、控制器支持同步/异步生成、前端提供风格尺寸等参数,并严格校验图像合法性及prompt去重。

在ThinkPHP项目中生成AI插画,本质是让后端接收用户输入的文本描述(prompt),安全调用多模态AI绘画API(如文心一格、DeepSeek Image、千帆ERNIE-VL等),完成图像生成、存储与元数据落库,全程不依赖本地GPU或模型加载。
配置AI服务凭证与环境变量
登录千帆大模型平台或百度智能云AI Studio,创建图像生成应用,获取AK/SK或API Key;将密钥写入.env文件而非硬编码:AI_IMAGE_API_KEY=sk-xxxxxxAI_IMAGE_BASE_URL=https://aip.baidubce.com/rpc/2.0/ernie-vl/generate
这一步必须做,否则后续所有请求都会因认证失败返回401 Unauthorized;【密钥切勿提交至Git仓库】。
定义AI图像生成模型类
在app/model下新建AIImageModel.php,继承think\Model,封装统一请求逻辑:
① 使用think\Http或GuzzleHttp\Client构造POST请求,自动拼接access_token参数(需先调用/oauth/2.0/token换取);
② 对用户传入的prompt做基础清洗:过滤控制字符、截断超长文本(≤512字)、替换中文标点为英文空格;
③ 设置超时为30秒,避免前端长时间等待;
④ 若响应含error_code字段且非0,抛出AIImageException并记录错误上下文(含原始prompt和时间戳)。
控制器接收请求并触发生成
在app/controller/AIImage.php中编写create()方法:
方法一:同步直出(适合低频小图)
接收POST /ai-image/create,校验prompt非空→调用AIImageModel::generate()→解析返回的image_url→用file_get_contents()拉取远程图→保存至public/uploads/ai/并生成唯一文件名(如ai_20260601170522_8a3f.png)→写入数据库记录user_id、prompt、storage_path、model_used(如"ernie-vl-4.5")。
方法二:异步队列(推荐用于生产)
改用think\Queue投递任务到Redis队列→控制器立即返回{"status":"queued","task_id":"qk_9a2b"}→后台Worker进程消费后执行下载与落库→通过WebSocket或轮询通知前端生成完成。
前端交互与多模态参数支持
在模板中使用form提交,除基础prompt外,额外提供以下可控字段:
• style下拉选项:写实 / 国风 / 像素 / 水彩 / 3D渲染
• size单选:1024x1024 / 768x1024 / 1024x768(不同API对尺寸有硬性限制)
• refine开关:启用后追加“高清细节、锐利边缘、专业摄影布光”等增强词(需预置语义映射表,避免用户乱填)
• reference_image文件上传:若API支持图生图(如ERNIE-VL的image_url字段),则读取Base64并嵌入请求体。
提交前用JavaScript校验prompt长度,防止后端反复报错;【style值必须与API文档严格一致,否则返回空图】。
图像存储与安全防护
生成的图片不得直接存Web可访问路径而不加校验——先写入runtime/ai_temp/临时目录→调用getimagesize()验证文件头是否为合法PNG/JPG→再移动至public/uploads/ai/→最后删除临时文件。
数据库中不存原始prompt全文,而是存md5(prompt . salt)用于去重;同一prompt 24小时内重复提交,直接返回历史storage_path,跳过API调用。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











