Cloudinary
云端图片/视频资源管理平台,提供上传、变换、优化、AI 处理和全球 CDN 分发的一站式解决方案
业界领先的云端媒体管理平台,将复杂的图片/视频处理抽象为简单的 URL 参数或 SDK 调用,支持 100+ 种图片格式和 AI 驱动的自动化处理能力,是企业级媒体处理的首选方案。
Cloudinary
云端图片/视频资源管理平台,提供上传、变换、优化、AI 处理和全球 CDN 分发的一站式解决方案
技术简介说明
Cloudinary 是业界领先的云端媒体管理平台,由 Itai Lahan 和 Gilad Rom 于 2012 年创立。它提供从媒体上传、存储、管理到变换、优化、分发的完整生命周期解决方案。Cloudinary 的核心价值在于将复杂的图片/视频处理抽象为简单的 URL 参数或 SDK 调用,开发者无需维护任何图片处理基础设施。
Cloudinary 的技术栈包括:自研的图片/视频处理引擎、全球多 CDN 分发网络(Akamai、Fastly、CloudFront)、AI/ML 驱动的自动化处理能力(背景移除、自动标签、智能裁剪、质量评估)、以及完善的 DAM(数字资产管理)系统。它支持 100+ 种图片格式和所有主流视频格式的变换和优化。
截至 2025-2026 年,Cloudinary 推出了 Cloudinary 2.0 版本(前端 monorepo 架构),统一了 SDK 体验。AI 功能持续增强,包括 Gemini Nano 集成(Pixel 设备)、自动标签增强、AI 图像生成等。Cloudinary 是企业级媒体处理的首选方案,被大量 Fortune 500 公司和电商平台采用。
基本信息
- 官网:https://cloudinary.com/
- GitHub:https://github.com/cloudinary(组织仓库,包含多个 SDK 和工具)
cloudinary_frontend_monorepo(Cloudinary 2.0 前端 SDK)cloudinary_npm(Node.js SDK)cloudinary-react(React SDK)
- License:MIT(SDK 开源);服务端为 SaaS 商业产品
- 最新版本:Cloudinary 2.0(前端 SDK 统一版本);cloudinary_npm v2.x(Node.js SDK,2025)
- 主要维护者/公司:Cloudinary Ltd.(Dror Gilon - CEO,Itai Lahan - CTO)
快速上手
安装
# Node.js SDK(传统)
npm install cloudinary
# Cloudinary 2.0 前端 SDK(推荐)
npm install @cloudinary/url-gen
# React SDK
npm install @cloudinary/react
# Next.js SDK
npm install @cloudinary/next
# Vue SDK
npm install @cloudinary/vue
# Angular SDK
npm install @cloudinary/angular基础配置
// Node.js SDK 配置
import { v2 as cloudinary } from 'cloudinary';
cloudinary.config({
cloud_name: 'your_cloud_name',
api_key: 'your_api_key',
api_secret: 'your_api_secret',
secure: true
});
// Cloudinary 2.0 SDK 配置
import { Cloudinary } from '@cloudinary/url-gen';
const cld = new Cloudinary({
cloud: { cloudName: 'your_cloud_name' },
url: { secure: true }
});最小示例
URL 变换方式:
原始图片:
https://res.cloudinary.com/demo/image/upload/sample.jpg
缩放 + WebP + 质量 80:
https://res.cloudinary.com/demo/image/upload/w_400,h_300,f_webp,q_80/sample.jpg
自动格式 + 自动质量:
https://res.cloudinary.com/demo/image/upload/f_auto,q_auto/sample.jpg
AI 背景移除:
https://res.cloudinary.com/demo/image/upload/background_removal:removebg/sample.jpg
智能裁剪:
https://res.cloudinary.com/demo/image/upload/c_fill,w_400,h_400,g_auto/sample.jpg
Cloudinary 2.0 SDK 方式:
import { Cloudinary } from '@cloudinary/url-gen';
import { fill } from '@cloudinary/url-gen/actions/resize';
import { format, quality } from '@cloudinary/url-gen/qualifiers';
import { autoGravity } from '@cloudinary/url-gen/qualifiers/gravity';
const cld = new Cloudinary({ cloud: { cloudName: 'demo' } });
const img = cld
.image('sample')
.resize(fill().width(400).height(300).gravity(autoGravity()))
.format(format('auto'))
.quality(quality('auto'));
console.log(img.toURL());
// https://res.cloudinary.com/demo/image/upload/c_fill,w_400,h_300,g_auto,f_auto,q_auto/sampleReact 组件方式:
import { Cloudinary } from '@cloudinary/url-gen';
import { AdvancedImage, responsive, lazyload, placeholder } from '@cloudinary/react';
import { fill } from '@cloudinary/url-gen/actions/resize';
import { format, quality } from '@cloudinary/url-gen/qualifiers';
const cld = new Cloudinary({ cloud: { cloudName: 'demo' } });
function App() {
const img = cld
.image('sample')
.resize(fill().width(800).height(600))
.format(format('auto'))
.quality(quality('auto'));
return (
<AdvancedImage
cldImg={img}
plugins={[responsive(), lazyload(), placeholder()]}
alt="Sample image"
/>
);
}核心概念与架构
核心架构
Cloudinary 采用四层架构设计:
- 上传与存储层:支持直接上传、远程 URL 抓取、CMS 集成导入;存储在 Cloudinary 云端或外部存储(S3、GCS)
- 处理引擎层:自研图片/视频处理引擎,支持 100+ 种变换操作,在多个处理区域实时执行
- AI/ML 层:AI 背景移除、自动标签、智能裁剪、质量评估、超分辨率、AI 图像生成
- 分发层:多 CDN 架构(Akamai、Fastly、CloudFront),全球边缘节点自动缓存
工作原理
- 上传:客户端或服务端通过 API 上传图片/视频
- 存储:资源存储在 Cloudinary 云端,分配唯一 public_id
- 变换:通过 URL 参数或 SDK 指定变换操作,Cloudinary 实时处理
- 优化:自动格式选择(
f_auto)、自动质量调整(q_auto) - 缓存:处理后的资源缓存在全球 CDN 节点
- 分发:后续请求直接返回 CDN 缓存
URL 结构
https://res.cloudinary.com/<cloud_name>/<resource_type>/<delivery_type>/<transformations>/<version>/<public_id>.<format>
# 示例
https://res.cloudinary.com/demo/image/upload/w_400,f_auto,q_auto/sample.jpg
# 参数说明
# - cloud_name: 账户标识
# - resource_type: image / video / raw
# - delivery_type: upload / private / authenticated / fetch
# - transformations: 变换参数链(如 w_400,h_300,c_fill)
# - public_id: 资源唯一标识
# - format: 输出格式(jpg / webp / avif / auto)
信用额度系统
Cloudinary 采用**信用额度(Credits)**作为统一计费单位:
| 资源类型 | 消耗规则 |
|---|---|
| 存储 | 1 GB/月 = 1 信用额度 |
| 变换 | 1,000 次变换 = 1 信用额度 |
| 带宽 | 1 GB 带宽 = 1 信用额度 |
| AI 功能 | 按操作消耗(如背景移除每次 1 信用额度) |
核心概念
- Public ID:资源的唯一标识符,用于构建 URL
- Transformation:变换操作(裁剪、缩放、格式、质量等)
- Named Transformations:预定义的变换组合,复用简化 URL
- Upload Preset:上传配置预设,控制上传行为
- Context & Metadata:资源的上下文信息和自定义元数据
- Responsive Images:自动 srcset 生成和 DPR 适配
核心特性
- 全格式支持:100+ 种图片格式和所有主流视频格式的变换和优化
- URL 变换:丰富的变换参数通过 URL 实时执行,无需预生成
- AI 自动化:
- AI 背景移除/替换(removebg、cloudinary AI)
- AI 自动标签(Gemini Nano 集成)
- AI 智能裁剪(auto gravity)
- AI 质量评估和优化
- AI 超分辨率
- AI 图像生成(文本到图片)
- 自动优化:
f_auto自动格式选择、q_auto自动质量调整 - 响应式图片:自动
srcset生成、DPR 适配、客户端提示(Client Hints) - 视频处理:转码、裁剪、叠加、字幕、HLS/DASH 自适应流
- DAM 系统:数字资产管理(企业版)、协作、审批工作流
- 多 CDN 分发:Akamai + Fastly + CloudFront,全球低延迟
- 安全:签名 URL、令牌认证、IP 白名单、SSE 加密
- 丰富的 SDK:Node.js、React、Vue、Angular、Next.js、Python、Ruby、Java、PHP、.NET 等 10+ 种
生态图
SDK 生态
| SDK | 包名 | 平台 |
|---|---|---|
| Node.js | cloudinary (v2.x) | 服务端 |
| Cloudinary 2.0 前端 | @cloudinary/url-gen | 通用 |
| React | @cloudinary/react | 前端 |
| Next.js | @cloudinary/next | 前端 |
| Vue | @cloudinary/vue | 前端 |
| Angular | @cloudinary/angular | 前端 |
| Python | cloudinary | 服务端 |
| Ruby | cloudinary | 服务端 |
| Java | cloudinary | 服务端 |
| PHP | cloudinary/cloudinary_php | 服务端 |
| .NET | CloudinaryDotNet | 服务端 |
| Android | cloudinary_android | 移动端 |
| iOS | cloudinary_ios | 移动端 |
构建工具集成
| 工具 | 集成方式 | 说明 |
|---|---|---|
| Next.js | @cloudinary/next | 官方 SDK,集成 next/image |
| Gatsby | gatsby-plugin-cloudinary | Gatsby 图片插件 |
| Nuxt | @nuxtjs/cloudinary | Nuxt 模块 |
| Strapi | @strapi/provider-upload-cloudinary | Strapi 上传提供者 |
| WordPress | Cloudinary WordPress 插件 | WordPress 媒体替换 |
| Shopify | Cloudinary Shopify App | 电商图片管理 |
外部存储集成
| 存储 | 说明 |
|---|---|
| Cloudinary 内置 | 默认选项 |
| AWS S3 | 外部存储代理 |
| Google Cloud Storage | 外部存储代理 |
| 远程 URL | fetch 模式代理 |
社区生态
- GitHub Stars:SDK 合计 5,000+ stars
- npm 周下载量:cloudinary ~500,000+/周,@cloudinary/url-gen ~200,000+/周
- 客户规模:大量 Fortune 500 公司、知名电商平台
- 合作伙伴:与 Adobe、Shopify、Contentful 等集成
适用场景
- 企业级媒体管理:大量图片/视频的统一存储、管理和分发
- 电商平台:商品图片自动优化、AI 标签、智能裁剪
- 社交媒体应用:用户上传图片的自动处理、头像裁剪、封面图生成
- 新闻/出版平台:媒体资源管理、版权追踪、协作审批
- SaaS 应用:快速集成媒体处理能力,无需自建基础设施
- 在线教育:视频课程处理、字幕生成、自适应流
- 营销活动:快速生成多尺寸、多格式的营销素材
开发与工程化
开发流程
// 完整的上传和处理流程
import { v2 as cloudinary } from 'cloudinary';
// 1. 上传
const uploadResult = await cloudinary.uploader.upload('local-image.jpg', {
public_id: 'products/product-001',
folder: 'my-app',
transformation: { width: 2000, height: 2000, crop: 'limit' },
eager: [
{ width: 800, height: 600, crop: 'fill', format: 'webp', quality: 'auto' },
{ width: 400, height: 400, crop: 'thumb', gravity: 'face', format: 'auto' },
{ width: 200, height: 200, crop: 'thumb', format: 'auto', quality: 60 }
],
context: { alt: 'Product photo', caption: 'Summer collection 2026' },
tags: ['product', 'summer-2026']
});
console.log('Uploaded:', uploadResult.secure_url);
// 2. 生成变换 URL
const url = cloudinary.url('my-app/products/product-001', {
width: 800,
height: 600,
crop: 'fill',
gravity: 'auto',
format: 'auto',
quality: 'auto',
effect: 'sharpen'
});
// 3. 获取资源信息
const info = await cloudinary.api.resource('my-app/products/product-001');
console.log('Size:', info.bytes, 'Format:', info.format);构建部署
Next.js 集成:
// next.config.js
module.exports = {
images: {
remotePatterns: [
{
protocol: 'https',
hostname: 'res.cloudinary.com',
pathname: '/your_cloud_name/**'
}
]
}
}
// 使用 @cloudinary/next
import { CldImage } from '@cloudinary/next';
export default function ProductPage({ product }) {
return (
<CldImage
src={`products/${product.id}`}
width={800}
height={600}
crop="fill"
gravity="auto"
format="auto"
quality="auto"
alt={product.name}
/>
);
}环境变量配置:
# .env.local
NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME=your_cloud_name
# API Key/Secret 仅服务端使用
CLOUDINARY_API_KEY=your_api_key
CLOUDINARY_API_SECRET=your_api_secretCI/CD 集成
# GitHub Actions: 媒体资源自动化
name: Media Pipeline
on: [push]
jobs:
process:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm ci
- run: node scripts/sync-media.js
env:
CLOUDINARY_API_KEY: ${{ secrets.CLOUDINARY_API_KEY }}
CLOUDINARY_API_SECRET: ${{ secrets.CLOUDINARY_API_SECRET }}
CLOUDINARY_CLOUD_NAME: ${{ secrets.CLOUDINARY_CLOUD_NAME }}工程化最佳实践
- 使用自动优化:始终使用
f_auto和q_auto - 预生成变换(Eager):为高频访问的图片预生成常用变换
- 命名变换:将常用变换组合定义为命名变换,简化 URL
- 缓存控制:合理设置
Cache-Control头 - 错误处理:妥善处理上传失败、变换错误等情况
- 使用 Context:为资源添加元数据,方便管理和搜索
// 命名变换配置
await cloudinary.api.create_transformation('product_thumb', {
width: 400, height: 400, crop: 'thumb', gravity: 'auto',
format: 'auto', quality: 'auto'
});
// 使用命名变换
const url = cloudinary.url('product-001', {
transformation: 'product_thumb'
});性能与安全
性能特点
- 全球分发:多 CDN(Akamai/Fastly/CloudFront)全球覆盖
- 缓存命中:处理后的资源缓存延迟 < 50ms
- 预生成变换:Eager transformations 避免首次请求延迟
- 自动优化:
f_auto+q_auto典型减少 40-70% 文件体积 - 响应式:自动生成
srcset,浏览器选择最优尺寸
安全注意事项
- 签名 URL:防止变换参数被篡改
- 令牌认证:基于时间戳的令牌验证
- IP 白名单:限制 API 访问来源
- 上传签名:服务端签名验证上传请求
- SSE 加密:静态数据加密存储
// 签名 URL 示例
const signedUrl = cloudinary.url('private-image', {
sign_url: true,
type: 'authenticated',
width: 800
});
// 上传签名
const signature = cloudinary.utils.api_sign_request(
{ timestamp: Math.round(Date.now() / 1000), folder: 'uploads' },
cloudinary.config().api_secret
);合规认证
- SOC 2 Type II:服务组织安全控制
- GDPR:欧盟数据保护合规
- CCPA:加州消费者隐私法
- ISO 27001:信息安全管理体系
已知性能瓶颈
- 信用额度消耗:变换次数直接消耗信用额度,大规模使用成本高
- AI 功能延迟:背景移除、智能裁剪等 AI 操作增加处理时间
- 视频处理:大规模视频转码消耗大量资源
- 冷启动:长时间未访问的图片重新处理有延迟
- API 限流:管理 API 有调用频率限制
技术对比
与同类服务对比
| 特性 | Cloudinary | ImageKit | Cloudflare Images | imgix |
|---|---|---|---|---|
| 免费层 | ✅ 25 信用额度/月 | ✅ 20 GB 带宽 | ✅ 5,000 变换 | ❌ 无 |
| 付费起步 | ~$89/月(Plus) | $9/月 | 按量(无月费) | $25-75/月 |
| 定价模型 | 信用额度(共享) | 带宽为主 | 按图 + 按交付 | 信用额度 |
| 变换计费 | 消耗信用额度 | 无限免费 | 包含 | 消耗信用额度 |
| 格式支持 | 100+ 种 | 主流格式 | 主流格式 | 主流格式 |
| AI 功能 | ✅ 丰富(背景移除、标签、生成) | ✅ AI 编辑套件 | ❌ | ✅ 有限 |
| DAM | ✅ 企业版完整 | ✅ 全计划可用 | ❌ | 仅企业版 |
| 视频处理 | ✅ 完整 | ✅ 完整 | ❌ | ✅ 企业版 |
| CDN | 多 CDN | CloudFront | Cloudflare | Fastly |
| SDK | 10+ 种 | 11 种 | 有限 | 有限 |
| 自定义域名 | 企业版 | Pro 起 | ✅ | $75 计划起 |
成本对比(100K 图片 / 500 万次月交付)
| 服务商 | 预估月费 | 每千次交付成本 |
|---|---|---|
| Cloudflare Images | ~$55 | ~$0.01 |
| ImageKit Pro | ~$130-170 | ~$0.025-0.035 |
| Cloudinary Plus | ~$200-250 | ~$0.04-0.05 |
| imgix | $75+ | 更高 |
选择建议
- 选择 Cloudinary:需要最全面的功能集、企业级 DAM、丰富的 AI 功能
- 选择 ImageKit:预算有限、需要 DAM、变换量大
- 选择 Cloudflare Images:追求最低成本、已有 Cloudflare 生态
- 选择 imgix:需要高级 URL 变换、已有 Fastly CDN
最佳实践
生产环境建议
- 始终使用自动优化
// 推荐:自动格式 + 自动质量
const img = cld.image('sample')
.format(format('auto'))
.quality(quality('auto'));
// URL 方式
// f_auto,q_auto- 预生成高频变换
// Eager transformations:上传时预生成
await cloudinary.uploader.upload('image.jpg', {
eager: [
{ width: 1200, format: 'auto', quality: 'auto' },
{ width: 800, format: 'auto', quality: 'auto' },
{ width: 400, format: 'webp', quality: 80 }
]
});- 使用 Client Hints
<!-- 启用 Client Hints 让服务端自动适配 DPR -->
<img
src="https://res.cloudinary.com/demo/image/upload/w_auto:100,dpr_auto/f_auto/sample.jpg"
sizes="100vw"
/>- 响应式图片最佳实践
<AdvancedImage
cldImg={cld.image('sample')
.resize(fill().width(800))
.format(format('auto'))
.quality(quality('auto'))}
plugins={[responsive(), lazyload(), placeholder({ mode: 'blur' })]}
alt="Responsive image"
/>常见陷阱
- 信用额度管理不当
// 问题:变换消耗信用额度,大规模使用成本高
// 解决:预生成变换、使用命名变换、合理缓存
// 命名变换(只计数一次)
await cloudinary.api.create_transformation('standard_thumb', {
width: 400, height: 400, crop: 'fill', format: 'auto', quality: 'auto'
});- API Secret 暴露
// 错误:API Secret 暴露到前端
const cloudinary = new Cloudinary({
cloud: { cloudName: 'demo', apiKey: '...', apiSecret: '...' } // ❌
});
// 正确:前端只用 cloudName,敏感操作用服务端 SDK
const cloudinary = new Cloudinary({
cloud: { cloudName: 'demo' } // ✅
});- 忽略缓存策略:未设置合理的缓存时间导致频繁回源
- 未使用 Eager:高频访问的图片未预生成,首次请求延迟高
- 过度使用 AI 功能:AI 操作消耗额外信用额度,成本可能失控
技术局限与边界
已知限制
- 信用额度模型复杂:存储、变换、带宽共享同一信用额度,难以预测成本
- 成本较高:大规模使用时成本显著高于 Cloudflare Images 或 ImageKit
- 免费层有限:25 信用额度/月对小型项目可能不够
- DAM 限企业版:完整 DAM 功能需要企业版订阅
- 自定义域名:自定义域名仅限企业版
- 供应商锁定:迁移到其他服务需要重构 URL 和集成
- AI 功能额外计费:背景移除等 AI 功能消耗额外信用额度
不适用场景
- 极低成本需求:大规模交付时成本远高于 Cloudflare Images
- 纯本地处理:需要离线图片处理应使用 Sharp
- 纯开源方案:Cloudinary 核心是商业 SaaS
- 极简需求:简单图片处理用 Sharp 或 Imagemin 更轻量
权衡取舍
- 功能全面 vs 成本:功能最丰富,但大规模使用成本高
- 便利性 vs 控制权:全托管服务方便,但依赖第三方
- AI 能力 vs 额外成本:AI 功能强大,但消耗额外信用额度
迁移注意事项
从 Cloudinary 迁移:
- URL 结构完全不同,需要重新映射变换参数
- Public ID 和文件夹结构需要迁移
- 签名 URL 和认证配置需要重新设置
- 建议分批迁移,先切换非关键资源
- 考虑使用 unpic 抽象 CDN 差异,降低迁移成本
学习资源
官方文档
- Cloudinary 官网:https://cloudinary.com/
- 文档中心:https://cloudinary.com/documentation
- Cloudinary 2.0 SDK:https://cloudinary.com/documentation/cloudinary_frontend_monorepo
- URL 变换参考:https://cloudinary.com/documentation/image_transformation_reference
- API 参考:https://cloudinary.com/documentation/cloudinary_api
教程
- 快速开始:https://cloudinary.com/documentation/quick_start
- React 集成:https://cloudinary.com/documentation/react2_integration
- Next.js 集成:https://cloudinary.com/documentation/nextjs_integration
- 视频处理:https://cloudinary.com/documentation/video_transformation_reference
- AI 功能:https://cloudinary.com/documentation/cloudinary_ai
社区资源
- GitHub:https://github.com/cloudinary
- Cloudinary 博客:https://cloudinary.com/blog
- Community:https://community.cloudinary.com/
- Stack Overflow:使用
[cloudinary]标签提问 - YouTube:Cloudinary 频道有大量教程视频
2026 年现状
最新版本
Cloudinary 在 2025-2026 年处于活跃开发状态:
- Cloudinary 2.0:前端 SDK 统一为 monorepo 架构(
@cloudinary/url-gen为核心) - AI 功能增强:Gemini Nano 集成、AI 标签增强、AI 图像生成
- Node.js SDK v2.x:更新到现代 TypeScript,支持 ESM
- Pixel 设备 AI:利用 Google Gemini Nano 在 Pixel 设备上进行端侧图像处理
发展趋势
- AI 驱动:从工具型平台向 AI 媒体平台转型
- 前端 SDK 统一:Cloudinary 2.0 统一了所有前端 SDK 体验
- 边缘处理:更多变换在边缘节点执行
- 视频 AI:AI 视频编辑、自动高光检测、智能字幕
- 企业级 DAM:增强协作、审批、版本控制能力
社区活跃度
- GitHub Stars:SDK 合计 5,000+ stars
- npm 周下载量:cloudinary ~500,000+/周
- 客户规模:大量 Fortune 500 公司
- 开发者满意度:功能全面但成本是主要痛点
未来路线图
- AI 功能持续扩展:更多 AI 编辑和生成能力
- Cloudinary 2.0 完善:更多框架的 SDK 适配
- 成本优化:可能调整定价模型应对竞争
- 边缘计算增强:更多处理在边缘节点完成
- 开发者体验:改进文档、CLI 工具、调试工具
Cloudinary 作为企业级媒体处理的行业标准,提供最全面的功能集,但成本是主要考虑因素。对于预算充足、需要完整媒体管理能力的企业,Cloudinary 仍然是首选方案。