个人项目 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

  1. 登录后,访问 https://www.pexels.com/api/

  2. 点击 “Your API Key” 或 “Get Started” 按钮

  3. 填写你的项目名称和用途(随便写就行,比如 “Personal project”)

  4. 提交后就能看到你的 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=800
PEXELS_DEFAULT_HEIGHT=600

配置位置说明: 上面的 PEXELS_API_KEY= 后面就是你需要填写 API 密钥的位置。把等号后面的文字替换成你从 Pexels 官网拿到的真实 Key 即可。

然后安装 dotenv 包来读取环境变量(Node.js 项目):

npm install dotenv
# 或者
yarn add dotenv

4.2 封装 API 调用

建议把 Pexels 的 API 调用封装成一个工具函数,方便在项目各处使用:

const axios = require('axios');
require('dotenv').config();

const PEXELS_API_KEY = process.env.PEXELS_API_KEY;
const PEXELS_BASE_URL = process.env.PEXELS_BASE_URL || 'https://api.pexels.com/v1';

const pexelsClient = 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>} 图片列表
 */
async function searchPhotos(query, options = {}) {
  const { perPage = 1, orientation, size, color } = options;

  const params = {
    query,
    per_page: perPage,
  };

  if (orientation) params.orientation = orientation;
  if (size) params.size = size;
  if (color) params.color = color;

  try {
    const response = await pexelsClient.get('/search', { params });
    return response.data.photos;
  } catch (error) {
    console.error('Pexels API 调用失败:', error.message);
    return [];
  }
}

/**
 * 获取单张随机图片
 * @param {string} query - 搜索关键词
 * @param {Object} options - 可选参数
 * @returns {Promise<string|null>} 图片 URL
 */
async function getRandomPhoto(query, options = {}) {
  const photos = await searchPhotos(query, { ...options, perPage: 15 });
  if (photos.length === 0) return null;

  // 随机选一张,避免每次都是同一张
  const randomIndex = Math.floor(Math.random() * photos.length);
  const photo = photos[randomIndex];

  // 返回中等尺寸的图片 URL
  return photo.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';

function ProductCard({ product }) {
  const [imageUrl, setImageUrl] = useState('');
  const [loading, setLoading] = useState(true);

  useEffect(() => {
    async function loadImage() {
      setLoading(true);
      // 根据商品名称搜索图片
      const url = await getRandomPhoto(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>
  );
}

export default ProductCard;

6.2 博客文章封面图

根据文章标题或标签自动生成封面图:

async function generateCoverImage(article) {
  // 优先用文章标签搜索,没有标签就用标题关键词
  const keyword = article.tags?.[0] || article.title.split(' ')[0];

  return await getRandomPhoto(keyword, {
    orientation: 'landscape',
    size: 'large'
  });
}

6.3 用户头像占位图

用户没有上传头像时,用 Pexels 的人像图作为默认头像:

async function getDefaultAvatar(gender = 'people') {
  return await getRandomPhoto(`${gender} portrait`, {
    orientation: 'square',
    size: 'small'
  });
}

6.4 页面 Banner 图

根据页面主题自动匹配 Banner 背景图:

// 首页 Banner
const bannerImage = await getRandomPhoto('technology workspace', {
  orientation: 'landscape',
  size: 'large'
});

// 关于我们页面 Banner
const aboutBanner = await getRandomPhoto('team meeting office', {
  orientation: 'landscape',
  size: 'large'
});

七、进阶优化技巧

7.1 图片缓存

不要每次都请求 API,加上本地缓存:

// 简单的内存缓存
const imageCache = new Map();

async function getCachedPhoto(query, options = {}) {
  const cacheKey = `${query}-${JSON.stringify(options)}`;

  if (imageCache.has(cacheKey)) {
    return imageCache.get(cacheKey);
  }

  const photo = await getRandomPhoto(query, options);
  if (photo) {
    imageCache.set(cacheKey, photo);
  }

  return photo;
}

7.2 降级策略

API 调用失败时要有备选方案:

async function getPhotoWithFallback(query, fallbackUrl) {
  try {
    const photo = await getRandomPhoto(query);
    return photo || fallbackUrl;
  } catch (error) {
    console.warn('获取 Pexels 图片失败,使用降级图片');
    return fallbackUrl;
  }
}

7.3 批量获取图片

如果需要很多图片,一次性获取比多次请求更高效:

async function getBatchPhotos(queries) {
  const promises = queries.map(query => getRandomPhoto(query));
  return await Promise.all(promises);
}

// 使用示例
const productNames = ['运动鞋', '背包', '耳机', '键盘'];
const images = await getBatchPhotos(productNames);

八、注意事项与最佳实践

8.1 API 调用限制

限制类型免费额度说明
每小时请求数200 次滚动窗口计算
每天请求数20,000 次个人项目完全够用

小技巧: 开发阶段可以把获取到的图片 URL 保存到本地 JSON 文件里,避免反复调用 API 浪费额度。

8.2 版权说明

Pexels 的图片使用规则很宽松:

  • 可以免费用于商业和非商业项目

  • 不需要征得摄影师同意

  • 不需要署名(但署名是礼貌的)

  • 可以修改、裁剪、二次创作

但也有一些限制:

  • 不能把图片直接拿去卖(比如做成图库、NFT 等)

  • 不能用图片上的可识别人物做代言、广告等可能侵犯肖像权的用途

  • 如果图片中有品牌、商标,要注意使用场景

8.3 性能优化建议

  1. 图片懒加载: 使用 loading="lazy" 或 Intersection Observer

  2. 选择合适尺寸: 不要在小图位置用超大尺寸的图片

  3. 添加缓存: 相同关键词的图片不要重复请求

  4. 预加载关键图片: Banner 图等首屏图片可以提前加载

  5. 使用 CDN: 生产环境建议把图片缓存到自己的 CDN 上

8.4 安全提示

  • 永远不要把 API Key 硬编码在前端代码里

  • 前端调用建议走后端代理,避免暴露 Key

  • .env 文件加入 .gitignore

  • 如果 API Key 泄露了,立即去 Pexels 后台重新生成

九、总结

回顾一下整个方案的核心:

  1. 去 Pexels 官网申请一个免费的 API Key

  2. 在项目里配置好环境变量,把 Key 填进去

  3. 告诉 Claude Code:“我有 Pexels API,帮我给项目配图”

  4. Claude Code 自动扫描、自动调用、自动搞定所有配图

整个过程可能只需要 10 分钟,但能让你的项目 UI 质感提升好几个档次。对于个人开发者来说,这是性价比极高的提升方式。

以前我们说"一张好图胜过千言万语",现在可以说"一个 API Key 胜过千张手动找的图"。

马上试试: 现在就去 Pexels 申请 API Key,然后丢给 Claude Code,看看它能给你的项目带来什么样的变化。你会发现,原来给项目配图可以这么简单。


配置位置回顾:在项目的 .env 文件中,找到 PEXELS_API_KEY= 这一行,把等号后面替换成你的真实 API 密钥即可。
这个是我项目中使用的效果
在这里插入图片描述
想看我具体的使用效果,到wx小程序里搜索 【节日里的故事】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI砖家

各位大佬,可怜可怜小弟

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值