H5微博不支持长图上传,仅限单张、宽高比固定、最大边≤4096px、大小≤5MB;微博App可识别高度≥宽度×3的RGB模式JPG/PNG长图并启用上下滑动浏览,需本地拼接且宽度为720/750px、高度≤20000px。
微博 HTML5 版本不支持直接上传长图,也没有内置的长图拼接入口——这是当前(2025 年)官方明确限制的行为。
微博移动端 Web 端(即 m.weibo.cn)默认使用 input[type="file"] 调起系统相册/文件选择器,但仅接受单张图片,且会强制压缩、裁切或拒绝超尺寸图像。服务器侧对 pic 字段的校验逻辑只允许单图、固定宽高比(如 16:9、1:1)、最大边≤4096px,且总文件大小通常限制在 5MB 以内。
长图(如 720×10000px)会被前端 JS 拦截,或上传后返回错误:{"code":100003,"msg":"图片格式或大小不支持"}。
微博 App(iOS/Android)虽未开放显式“长图拼接”按钮,但具备隐式识别能力:只要上传的图片高度 ≥ 宽度 × 3,且为 JPG/PNG、无 EXIF 异常、无透明通道(PNG 需为 RGB 模式),就会自动启用“长图浏览”模式(上下滑动查看)。
PIL.Image 或 macOS 的 sips 命令拼接,避免用微信/QQ 自带截图工具生成的带阴影/圆角/水印图exiftool -all= image.jpg 清除元数据,可降低被拦截概率很多用户拼完图仍发不出,问题往往出在技术参数上:
720px 或 750px(适配主流手机屏宽),过高(如 1080px)可能触发压缩降质甚至拒绝20000px,否则 App 上传时会静默失败(无提示,仅卡在“上传中”)RGB 模式,CMYK 或含 Alpha 通道的 PNG 会被转白底或报错from PIL import Image示例:垂直拼接三张 72
0x1200 图片
imgs = [Image.open("p1.jpg"), Image.open("p2.jpg"), Image.open("p3.jpg")] width = 720 total_height = sum(img.height for img in imgs) result = Image.new('RGB', (width, total_height))
y_offset = 0 for img in imgs: result.paste(img, (0, y_offset)) y_offset += img.height
result.save("long_post.jpg", quality=95, optimize=True)
真正卡住人的不是“怎么拼”,而是拼完后发现微博 App 上传时没反应——大概率是宽度不对、高度超限,或者 PNG 模式没转。