个人项目 UI 没配图?用 Pexels API + Claude Code 一键搞定
个人项目 UI 没配图?用 Pexels API + Claude Code 一键搞定
一、为什么你的项目需要自动配图方案
作为个人开发者,你是不是经常遇到这样的情况:用 Claude Code 噼里啪啦写了一堆代码,功能都实现了,但打开页面一看 —— 光秃秃的,商品页没有商品图,Banner 位是空的,用户头像全是默认灰色占位符。整个 UI 瞬间就"廉价"了。
手动找图吧,太费时间:打开素材网站、搜索关键词、筛选尺寸、下载、重命名、放到项目目录里……一套流程下来半小时没了,而且还只搞定了几张图。
有没有更高效的方式?
有。把 Pexels 的 API 密钥丢给 Claude Code,让 AI 帮你自动抓取配图。从"手动找图半小时"变成"一句话搞定所有配图",这才是 AI 开发时代该有的效率。
核心思路:Pexels 提供免费商用的高质量图片 API,Claude Code 可以读取你的项目代码、理解页面结构,然后自动调用 API 为每个需要配图的位置生成合适的图片。你只需要提供一个 API Key。
二、为什么选择 Pexels
市面上免费图片网站不少,但 Pexels 是最适合开发者接入的之一:
完全免费商用:所有图片都可以免费用于个人和商业项目,无需署名(虽然署名是礼貌的)
图片质量高:都是专业摄影师上传的高清素材,比那些"免费图库"的质量高好几个档次
API 友好:RESTful 接口设计,文档清晰,接入简单
搜索功能强大:支持关键词搜索、颜色筛选、方向筛选、尺寸筛选等
调用额度充足:免费版每小时 200 次请求,每天 20000 次,个人项目完全够用
三、获取你的 Pexels API Key
3.1 注册账号
访问 https://www.pexels.com,点击右上角注册账号,可以用邮箱注册,也可以直接用 Google / Facebook 账号登录。
3.2 申请 API Key
登录后,访问 https://www.pexels.com/api/
点击 “Your API Key” 或 “Get Started” 按钮
填写你的项目名称和用途(随便写就行,比如 “Personal project”)
提交后就能看到你的 API Key 了
注意:API Key 是私密信息,不要直接硬编码在代码里,更不要提交到公开的 GitHub 仓库。正确做法是放在环境变量或配置文件中。
四、项目配置
4.1 环境变量配置
在你的项目根目录创建.env文件,把 API Key 放进去:
# Pexels API 配置PEXELS_API_KEY=你的API密钥填在这里PEXELS_BASE_URL=https://api.pexels.com/v1# 可选:默认图片尺寸PEXELS_DEFAULT_WIDTH=800PEXELS_DEFAULT_HEIGHT=600配置位置说明:上面的PEXELS_API_KEY=后面就是你需要填写 API 密钥的位置。把等号后面的文字替换成你从 Pexels 官网拿到的真实 Key 即可。
然后安装dotenv包来读取环境变量(Node.js 项目):
npminstalldotenv# 或者yarnadddotenv4.2 封装 API 调用
建议把 Pexels 的 API 调用封装成一个工具函数,方便在项目各处使用:
constaxios=require('axios');require('dotenv').config();constPEXELS_API_KEY=process.env.PEXELS_API_KEY;constPEXELS_BASE_URL=process.env.PEXELS_BASE_URL||'https://api.pexels.com/v1';constpexelsClient=axios.create({baseURL:PEXELS_BASE_URL,headers:{Authorization:PEXELS_API_KEY}});/** * 搜索图片 * @param {string} query - 搜索关键词 * @param {Object} options - 可选参数 * @param {number} options.perPage - 每页数量,默认 1 * @param {string} options.orientation - 方向:landscape/portrait/square * @param {string} options.size - 尺寸:small/medium/large * @param {string} options.color - 主色调 * @returns {Promise<Array>} 图片列表 */asyncfunctionsearchPhotos(query,options={}){const{perPage=1,orientation,size,color}=options;constparams={query,per_page:perPage,};if(orientation)params.orientation=orientation;if(size)params.size=size;if(color)params.color=color;try{constresponse=awaitpexelsClient.get('/search',{params});returnresponse.data.photos;}catch(error){console.error('Pexels API 调用失败:',error.message);return[];}}/** * 获取单张随机图片 * @param {string} query - 搜索关键词 * @param {Object} options - 可选参数 * @returns {Promise<string|null>} 图片 URL */asyncfunctiongetRandomPhoto(query,options={}){constphotos=awaitsearchPhotos(query,{...options,perPage:15});if(photos.length===0)returnnull;// 随机选一张,避免每次都是同一张constrandomIndex=Math.floor(Math.random()*photos.length);constphoto=photos[randomIndex];// 返回中等尺寸的图片 URLreturnphoto.src.medium;}module.exports={searchPhotos,getRandomPhoto,};五、与 Claude Code 配合使用
5.1 怎么告诉 Claude Code 用 Pexels API
这是最关键的一步。你不需要自己写所有调用逻辑,只需要把 API Key 和需求告诉 Claude Code,它会帮你搞定一切。
在 Claude Code 中输入类似这样的指令:
我项目里已经配置了 Pexels API,API Key 在 .env 文件的 PEXELS_API_KEY 中。 请帮我做以下事情: 1. 扫描项目中所有需要配图的地方(商品列表、Banner、用户头像等) 2. 为每个位置调用 Pexels API 获取合适的配图 3. 图片关键词要和页面内容匹配,比如商品页就搜商品相关的词 4. 确保图片尺寸适合对应的 UI 位置 5. 加上图片加载失败时的降级处理 相关工具函数在 utils/pexels.js,你可以直接使用或修改。5.2 Claude Code 会自动做什么
当你把 API Key 和需求告诉 Claude Code 后,它会:
理解项目结构:读取你的代码,找出哪些页面、组件需要配图
生成匹配的关键词:根据页面内容(比如"运动鞋商品页")自动生成合适的搜索关键词
编写调用逻辑:在合适的位置插入 API 调用代码
处理加载状态:自动加上 loading 状态和错误降级
优化性能:加上图片懒加载、缓存策略等
实际体验:以前手动给一个电商项目配图可能要花大半天,现在把 API Key 丢给 Claude Code,喝杯咖啡的功夫,整个项目的配图就都搞定了。而且 AI 选的图往往比你自己瞎找的更匹配。
5.3 更精准的控制
如果你对配图有特定要求,可以在提示词里说得更详细:
请为商品列表页的 12 个商品生成配图: - 每个商品的图片要和商品名称对应 - 图片风格要统一,都是白底产品图风格 - 尺寸统一为 400x400 - 优先选择明亮、干净的图片 - 如果搜索不到完全匹配的,就用相近类别的图代替 商品列表: 1. 白色运动鞋 2. 黑色双肩包 3. 无线蓝牙耳机 4. 机械键盘 ...(以此类推)六、常见应用场景
6.1 商品列表页自动配图
这是最常见的场景。电商项目、展示类项目都需要大量商品图:
import{useState,useEffect}from'react';import{getRandomPhoto}from'../utils/pexels';functionProductCard({product}){const[imageUrl,setImageUrl]=useState('');const[loading,setLoading]=useState(true);useEffect(()=>{asyncfunctionloadImage(){setLoading(true);// 根据商品名称搜索图片consturl=awaitgetRandomPhoto(product.name,{orientation:'square',size:'medium'});setImageUrl(url);setLoading(false);}loadImage();},[product.name]);return(<div className="product-card"><div className="product-image">{loading?(<div className="skeleton"/>):imageUrl?(<img src={imageUrl}alt={product.name}loading="lazy"/>):(<div className="placeholder">暂无图片</div>)}</div><h3>{product.name}</h3><p className="price">¥{product.price}</p></div>);}exportdefaultProductCard;6.2 博客文章封面图
根据文章标题或标签自动生成封面图:
asyncfunctiongenerateCoverImage(article){// 优先用文章标签搜索,没有标签就用标题关键词constkeyword=article.tags?.[0]||article.title.split(' ')[0];returnawaitgetRandomPhoto(keyword,{orientation:'landscape',size:'large'});}6.3 用户头像占位图
用户没有上传头像时,用 Pexels 的人像图作为默认头像:
asyncfunctiongetDefaultAvatar(gender='people'){returnawaitgetRandomPhoto(`${gender}portrait`,{orientation:'square',size:'small'});}6.4 页面 Banner 图
根据页面主题自动匹配 Banner 背景图:
// 首页 BannerconstbannerImage=awaitgetRandomPhoto('technology workspace',{orientation:'landscape',size:'large'});// 关于我们页面 BannerconstaboutBanner=awaitgetRandomPhoto('team meeting office',{orientation:'landscape',size:'large'});七、进阶优化技巧
7.1 图片缓存
不要每次都请求 API,加上本地缓存:
// 简单的内存缓存constimageCache=newMap();asyncfunctiongetCachedPhoto(query,options={}){constcacheKey=`${query}-${JSON.stringify(options)}`;if(imageCache.has(cacheKey)){returnimageCache.get(cacheKey);}constphoto=awaitgetRandomPhoto(query,options);if(photo){imageCache.set(cacheKey,photo);}returnphoto;}7.2 降级策略
API 调用失败时要有备选方案:
asyncfunctiongetPhotoWithFallback(query,fallbackUrl){try{constphoto=awaitgetRandomPhoto(query);returnphoto||fallbackUrl;}catch(error){console.warn('获取 Pexels 图片失败,使用降级图片');returnfallbackUrl;}}7.3 批量获取图片
如果需要很多图片,一次性获取比多次请求更高效:
asyncfunctiongetBatchPhotos(queries){constpromises=queries.map(query=>getRandomPhoto(query));returnawaitPromise.all(promises);}// 使用示例constproductNames=['运动鞋','背包','耳机','键盘'];constimages=awaitgetBatchPhotos(productNames);八、注意事项与最佳实践
8.1 API 调用限制
| 限制类型 | 免费额度 | 说明 |
|---|---|---|
| 每小时请求数 | 200 次 | 滚动窗口计算 |
| 每天请求数 | 20,000 次 | 个人项目完全够用 |
小技巧:开发阶段可以把获取到的图片 URL 保存到本地 JSON 文件里,避免反复调用 API 浪费额度。
8.2 版权说明
Pexels 的图片使用规则很宽松:
可以免费用于商业和非商业项目
不需要征得摄影师同意
不需要署名(但署名是礼貌的)
可以修改、裁剪、二次创作
但也有一些限制:
不能把图片直接拿去卖(比如做成图库、NFT 等)
不能用图片上的可识别人物做代言、广告等可能侵犯肖像权的用途
如果图片中有品牌、商标,要注意使用场景
8.3 性能优化建议
图片懒加载:使用
loading="lazy"或 Intersection Observer选择合适尺寸:不要在小图位置用超大尺寸的图片
添加缓存:相同关键词的图片不要重复请求
预加载关键图片:Banner 图等首屏图片可以提前加载
使用 CDN:生产环境建议把图片缓存到自己的 CDN 上
8.4 安全提示
永远不要把 API Key 硬编码在前端代码里
前端调用建议走后端代理,避免暴露 Key
把
.env文件加入.gitignore如果 API Key 泄露了,立即去 Pexels 后台重新生成
九、总结
回顾一下整个方案的核心:
去 Pexels 官网申请一个免费的 API Key
在项目里配置好环境变量,把 Key 填进去
告诉 Claude Code:“我有 Pexels API,帮我给项目配图”
Claude Code 自动扫描、自动调用、自动搞定所有配图
整个过程可能只需要 10 分钟,但能让你的项目 UI 质感提升好几个档次。对于个人开发者来说,这是性价比极高的提升方式。
以前我们说"一张好图胜过千言万语",现在可以说"一个 API Key 胜过千张手动找的图"。
马上试试:现在就去 Pexels 申请 API Key,然后丢给 Claude Code,看看它能给你的项目带来什么样的变化。你会发现,原来给项目配图可以这么简单。
配置位置回顾:在项目的.env文件中,找到PEXELS_API_KEY=这一行,把等号后面替换成你的真实 API 密钥即可。
这个是我项目中使用的效果
想看我具体的使用效果,到wx小程序里搜索 【节日里的故事】
