🖼️ JPG 图像
有损压缩,面向照片且文件较小
✅ 永久免费
🚫 无需注册
⚡ 即刻下载
100 KB
JPG
102,400 bytes
image/jpeg
100 MB
JPG
104,857,600 bytes
image/jpeg
10 KB
JPG
10,240 bytes
image/jpeg
10 MB
JPG
10,485,760 bytes
image/jpeg
1 MB
JPG
1,048,576 bytes
image/jpeg
25 MB
JPG
26,214,400 bytes
image/jpeg
500 KB
JPG
512,000 bytes
image/jpeg
50 MB
JPG
52,428,800 bytes
image/jpeg
5 MB
JPG
5,242,880 bytes
image/jpeg
关于JPG 图像
JPEG (Joint Photographic Experts Group) 是有损压缩图像格式。它能高效压缩照片这类色彩连续变化的图像,因此在 Web 图像和数码相机存储中广泛使用。MIME 类型为 image/jpeg,扩展名为 .jpg / .jpeg。
提供从 10 KB 到 100 MB 的各种大小,可用于测试媒体上传功能、验证照片管理系统以及为图像优化库做基准测试。
JPEG 的特点
- 有损压缩 — 每次重新保存都会降低画质,因此不适合作为编辑中间格式
- 不支持透明 — 需要透明时应选择 PNG 或 WebP
- 可在 EXIF 中保存拍摄时间、GPS 坐标与 Orientation。用户投稿时必须清除位置信息
- 忽略 Orientation 标签会导致竖拍照片横躺显示
相关参考与文章
📖 常见的坑
提供 1 KB 到 100 MB 各种大小的 PNG / JPEG / GIF / WebP,可用于确认上传上限、缩略图生成与验证图像库。各格式的差异见上文说明,而实现中真正踩到的多是与格式无关的共通陷阱。
| 情形 | 会发生什么 | 怎么处理 |
|---|---|---|
| 图片很小却把内存耗尽 | 所需内存取决于解码后的像素数而非文件大小。20 KB 的 PNG 若为 10,000 × 10,000 像素,按 RGBA 计约需 400 MB。 | 除大小上限外还要设置尺寸上限。解码前可仅读头部获取宽 × 高(PHP 用 getimagesize(),Python 的 Pillow 在 Image.open() 之后、load() 之前)。 |
| 竖拍的照片显示成横躺 | 相机不会旋转像素,只在 EXIF 的 Orientation 标签里记录朝向。不读该标签的处理程序就会按传感器方向显示。 | 生成缩略图前先读取 Orientation,真正旋转像素并清除该标签。只旋转却保留标签,支持该标签的浏览器会再转一次。可用 EXIF 查看器确认内容。 |
| 转换后动画和透明都没了 | 经过浏览器 Canvas 的转换一次只能容纳一帧,动图 GIF 会变成第一帧的静态图。转成 JPEG 时透明会被填成白色或黑色。 | 要保留动画,需要能处理多帧的工具,如 ImageMagick 或 libvips,而不是 Canvas。要保留透明,输出请选 PNG 或 WebP。 |
| 看着像图片的文件其实不是 | 扩展名与 Content-Type 都是发送方的声明。在末尾拼接了其他数据的图片,在查看器里照样能正常打开。 |
先用起始字节判断,再重新编码后保存。解码后重新写出会丢弃附加数据与嵌入的元数据。字节序列见魔术字节表。 |
若直接分发用户上传的图片,唯有 SVG 需要区别对待。SVG 不是图片,而是可执行脚本的文档,从同源分发就会成为跨站脚本的通道。请从独立域名分发,或用 Content-Security-Policy 与 Content-Disposition: attachment 加以限制。