
最近折腾了 PosterPilot 这个校园活动海报适配工具,踩了几个 Cloudinary(云端图片与视频管理平台)上传和裁剪的坑,这篇把整个实现思路、关键参数和使用方式说清楚。
大学社团和活动组织者经常需要制作海报,用来宣传讲座、工作坊、竞赛、黑客马拉松等校园活动。
但同一张海报要发到不同平台时,往往会遇到尺寸不匹配的问题。Instagram 帖子、Instagram 快拍和网站预览需要完全不同的宽高比。直接缩放图片,很容易裁掉活动标题、日期、地点或者赞助商 Logo 等关键信息。
为了验证图片转换能不能解决这些问题,我做了一个基于 Cloudinary 的 Web(网页)应用 PosterPilot。用户只需上传一次活动海报,就能生成多种尺寸和风格的输出版本。
PosterPilot 是一个面向大学社团和活动组织者的 Web 图片适配工具。
用户上传一次活动海报后,就可以使用 Cloudinary 的图片转换能力生成不同格式。核心思路很简单:让海报适配更省事,同时把关键控制权交给用户——到底要完整保留原图,还是让图片填满目标画布。
🌐 在线体验:https://posterpilot.vercel.app
💻 GitHub 仓库:https://github.com/alpha5-rdx/posterpilot

假设某个大学社团为一场即将举办的技术活动设计了一张海报,准备同时发布到三个地方:
每个平台要求的图片尺寸都不一样。为了凑合这些尺寸而裁剪原图,很容易把真正重要的内容切掉。
所以我做了一个简单方案:不用让用户反复打开设计工具修改同一张海报,直接生成适配不同平台的版本。
这个项目主要用了下面这些技术:
整个项目采用纯前端架构。图片存储和分发全部交给 Cloudinary,因此这个版本不需要再搭一套独立后端。
Cloudinary 是整个应用的核心。
我通过非签名上传预设接入了 Cloudinary Upload API(应用程序接口)。这样前端可以直接上传图片,同时不用暴露 Cloudinary API Secret(应用程序接口密钥)。
应用会把选中的图片和上传预设发送到 Cloudinary 图片上传端点:https://api.cloudinary.com/v1_1//image/upload
上传成功后,Cloudinary 会返回以下信息:
PosterPilot 会使用这些返回信息生成转换后的图片 URL。这样应用只维护一份原始上传图片,就能通过 Cloudinary 动态生成多个版本。
PosterPilot 当前内置了五种预设格式:
格式:Instagram 方形帖子 尺寸:1080 x 1080
格式:Instagram 快拍 尺寸:1080 x 1920
格式:Web/社交媒体预览 尺寸:1080 x 1080
格式:LinkedIn 竖版 尺寸:1080 x 1350
格式:LinkedIn 方形 尺寸:1080 x 1080
复制图片 URL 或下载图片之前,用户可以先预览生成结果。

这个项目里我最想探索的功能,是完整保留原图和填满目标画布这两种处理方式的区别。
这个模式使用 Cloudinary 的 c_pad 转换参数。
转换示例:c_pad,w_1080,h_1080,b_white/q_auto/f_auto
它会在保留完整图片的前提下,把原图放进指定尺寸。如果图片和目标画布的宽高比不同,系统会补充留白来填满画布。
当海报里有必须保留的重要信息时,这种模式最合适。

另一种模式使用 Cloudinary 的 c_fill 转换参数,并把图片重心设为居中。
转换示例:c_fill,g_center,w_1080,h_1080/q_auto/f_auto
它会通过裁剪把图片填满目标尺寸,不再保留原图中的所有边缘内容。
如果用户更在意画布的完整视觉效果,并且能接受部分原图被裁掉,这种模式会更合适。

项目里还用了两个很实用的 Cloudinary 转换参数:
q_auto:自动选择合适的图片质量参数。f_auto:根据浏览器支持情况自动选择合适的分发格式。有了这两个参数,就不用再手工准备多套优化文件,图片分发效率也能直接交给 Cloudinary。
除了图片转换,PosterPilot 还提供了这些功能:
开发完成后,我先在本地测试了应用,随后使用 Vercel 完成部署。上线后又检查了一遍主要流程,确认:
应用地址:https://posterpilot.vercel.app
做完 PosterPilot 之后,我对 Cloudinary 的图片上传和转换能力有了更直观的认识,也实际接触了下面这些概念:
我也意识到,一个真正实用的项目并不一定需要复杂的架构。有时候,把合适的服务和一个边界清晰的真实问题结合起来,就能做出简单但有价值的解决方案。
PosterPilot 目前只是初始版本,后面还有很多可以改进的地方。计划中的功能包括:
PosterPilot 起点很小,就是一个很具体的校园场景:如何把活动海报适配成不同格式,同时尽量不丢关键信息。
通过这个项目,我实际体验了 Cloudinary 如何把图片上传、转换、优化和分发整合进现代 Web 应用。
接下来我还会继续学习、动手做项目,并探索 Cloudinary 的更多实用场景。
如果你使用过类似工具,或者对这个项目有任何建议,欢迎在评论区交流。
在线体验:Vercel Link
GitHub:GitHub Repo