图片格式选择

PNG、GIF、JPG 的区别及使用场景

问题

PNG、GIF、JPG 三种图片格式有什么区别?如何根据场景选择合适的格式?

解答

格式对比

特性JPGPNGGIF
压缩方式有损无损无损
透明度不支持支持支持(仅全透明)
动画不支持不支持支持
色彩1600万色1600万色256色
文件大小较大

JPG (JPEG)

有损压缩,文件体积小,适合色彩丰富的图片。

<!-- 适合:照片、背景图、Banner -->
<img src="photo.jpg" alt="风景照片">
<div style="background-image: url('banner.jpg')"></div>

优点:压缩率高,加载快
缺点:有损压缩会降低画质,不支持透明

PNG

无损压缩,支持透明通道,画质清晰。

<!-- 适合:Logo、图标、需要透明背景的图片 -->
<img src="logo.png" alt="公司Logo">
<img src="icon.png" alt="透明图标">

PNG-8:256色,文件小,类似 GIF
PNG-24:1600万色,文件较大,画质好

GIF

支持动画和透明,但只有 256 色。

<!-- 适合:简单动画、表情包 -->
<img src="loading.gif" alt="加载动画">
<img src="emoji.gif" alt="动态表情">

选择建议

function chooseFormat(image) {
  // 1. 需要动画 → GIF 或 WebP
  if (image.needAnimation) return 'gif';
  
  // 2. 需要透明 → PNG
  if (image.needTransparency) return 'png';
  
  // 3. 照片/复杂图像 → JPG
  if (image.isPhoto || image.hasComplexColors) return 'jpg';
  
  // 4. 图标/Logo/简单图形 → PNG 或 SVG
  if (image.isIcon || image.isLogo) return 'png';
  
  // 5. 默认选择
  return 'jpg';
}

现代格式补充

<!-- WebP:Google 推出,兼顾体积和质量 -->
<picture>
  <source srcset="image.webp" type="image/webp">
  <source srcset="image.jpg" type="image/jpeg">
  <img src="image.jpg" alt="兼容写法">
</picture>

<!-- AVIF:更高压缩率,兼容性较差 -->
<picture>
  <source srcset="image.avif" type="image/avif">
  <source srcset="image.webp" type="image/webp">
  <img src="image.jpg" alt="渐进增强">
</picture>

关键点

  • JPG:有损压缩,体积小,适合照片和复杂图像
  • PNG:无损压缩,支持透明,适合图标、Logo
  • GIF:256色限制,支持动画,适合简单动画
  • 选择原则:透明用 PNG,动画用 GIF,照片用 JPG
  • 现代方案:优先考虑 WebP,用 <picture> 做兼容