图片优化–质量与性能的博弈

无论是作者还是《高性能网站建设指南》的作者,都认为图片的优化优先级高于js和css的优先级,因为这是用户可感知的。

图片压缩我们通常会选择压缩图片的体积来减少网络加载时长,但一般会牺牲一些图片成像效果。

目前主要的图片分类有JPEG/JPG、PNG、WebP、Base64、SVG

JPEG/JPG

关键词:有损压缩、体积小、加载快、不支持透明

JPG 适用于呈现色彩丰富的图片,在我们日常开发中,JPG 图片经常作为大的背景图、轮播图或 Banner 图出现。

当在处理颜色对比强烈的图像时,人为压缩导致的图片模糊会相当明显。且JPEG不支持透明图片。

PNG-8 与 PNG-24

关键字:无损压缩、质量高、体积大、支持透明。

PNG是一种无损压缩的高保真的图片格式。跟JPG相比,有更强的色彩表现力,对线条的处理更加细腻,对透明度有良好的支持。唯一的缺点就是体积有点大。

主要使用场景:主要用来处理小logo、背景图等。

SVG

关键字:文本文件、体积小、不失真、兼容性好

SVG(可缩放矢量图形)是一种基于 XML 语法的图像格式。它和本文提及的其它图片种类有着本质的不同:SVG 对图像的处理不是基于像素点,而是是基于对图像的形状描述

SVG 与 PNG 和 JPG 相比,文件体积更小,可压缩性更强。
当然,作为矢量图,它最显著的优势还是在于图片可无限放大而不失真这一点上。这使得 SVG 即使是被放到视网膜屏幕上,也可以一如既往地展现出较好的成像品质——1 张 SVG 足以适配 n 种分辨率。

此外,SVG 是文本文件。我们既可以像写代码一样定义 SVG,把它写在 HTML 里、成为 DOM 的一部分,也可以把对图形的描述写入以 .svg 为后缀的独立文件(SVG 文件在使用上与普通图片文件无异)。这使得 SVG 文件可以被非常多的工具读取和修改,具有较强的灵活性。

SVG 的局限性主要有两个方面,一方面是它的渲染成本比较高,这点对性能来说是很不利的。另一方面,SVG 存在着其它图片格式所没有的学习成本(它是可编程的)。

Base64

作为雪碧图的补充而存在。雪碧图主要是将很多小图合并到一张透明背景上再结合css定位显示特定部分减少网络请求的一种优化方式。
base64把图片进行编码可以将结果写入到html和css中从而减少网络请求。base64编码之后图片会膨胀至原来的40%。

在我的开发中实际遇到过一个问题就是7M的图片经过压缩后再进行base64存入前端存储localsorage中,经常会出现卡顿等现象。

总结

图片常见格式有JPG/JPEG, PNG-8/PNG-24, SVG,Base64。

JPG/JPEG有损压缩图片,体积小,加载快。不支持透明。适合色彩丰富的图片如轮播图等.

PNG-8与PNG-24无损压缩图片,质量好但体积大。支持透明,一般的logo、背景图都会采用此图片。

svg可缩放矢量图,体积小不失真兼容性好。svg的渲染成本高于前两者

Base64作为雪碧图的补充出现,通过对图片进行base64编码可以直接将编码结果写入html和css,可以减少网络请求。大图不适合用base64 因为编码之后会膨胀。

现在跟后端交互过程中,很多图片都会采用base64编码后传给后端。此时需要注意图片的大小问题。

从场景上区分,如果轮播图我们一般会使用jpg图片,logo和背景图一般会使用png图片,如果是小图标可以采用雪碧图,或svg .base64可以用在小图上减少网络请求。

常见图片分类及适用场景相关推荐

  1. 3.4 Kaggle自然场景图片分类

    3.4 Kaggle自然场景图片分类 自然场景识别数据集来自kaggle竞赛平台,最初是由Intel举办的一个图片分类竞赛数据集,它的训练集有14034张图片,测试集有3000张图片,未标注数据集有7 ...

  2. 【经典算法必读】图片分类系列之(一): 你真的了解图片分类(Image Classification)吗?...

    欢迎关注我的个人微信公众号:小纸屑 图片分类是机器学习经典问题,也是深度学习声名鹊起之作.正是2012年AlexNet在图片分类竞赛ImageNet出乎寻常的性能,使得深度学习一夜爆红,方有今天人工智 ...

  3. 深度学习系统相比较传统的机器学习系统,针对常见的分类问题,精度究竟能有多大提升?...

    来源:知乎 原文链接:深度学习系统相比较传统的机器学习系统,针对常见的分类问题,精度究竟能有多大提升? 问题: 我现在手头有一个binary classification的问题.数据量在一百万左右.每 ...

  4. 动手深度学习13——计算机视觉:数据增广、图片分类

    文章目录 一.数据增广 1.1 为何进行数据增广? 1.2 常见图片增广方式 1.2.1 翻转 1.2.2 切割(裁剪) 1.2.3 改变颜色 1.2.4 综合使用 1.3 使用图像增广进行训练 1. ...

  5. 实战:掌握PyTorch图片分类的简明教程 | 附完整代码

    作者 | 小宋是呢 转载自CSDN博客 1.引文 深度学习的比赛中,图片分类是很常见的比赛,同时也是很难取得特别高名次的比赛,因为图片分类已经被大家研究的很透彻,一些开源的网络很容易取得高分.如果大家 ...

  6. 嵌入式系统分类及其应用场景_词嵌入及其应用简介

    嵌入式系统分类及其应用场景 Before I give you an introduction on Word Embeddings, take a look at the following exa ...

  7. 宠物狗图片分类之迁移学习代码笔记

    五月两场 | NVIDIA DLI 深度学习入门课程 5月19日/5月26日一天密集式学习  快速带你入门阅读全文> 正文共3152个字,预计阅读时间8分钟. 本文主要是总结之前零零散散抽出时间 ...

  8. 常见的设计模式和应用场景

    常见的设计模式和应用场景 单例模式 原型模式 命令模式 六大设计原则 1. 单一职责原则 2. 开闭原则 3. 里氏替换原则 4. 依赖倒置原则 5. 接口隔离原则 6. 迪米特法则 设计模式从大的维 ...

  9. 基于卷积神经网络CNN的图片分类实现——附代码

    目录 摘要: 1.卷积神经网络介绍: 2.卷积神经网络(CNN)构建与训练: 2.1 CNN的输入图像 2.2 构建CNN网络 2.3 训练CNN网络 3.卷积神经网络(CNN)的实际分类测试: 4. ...

  10. AI实战:目标检测模型应用之生活垃圾图片分类

    前言 "华为云杯"2020深圳开放数据应用创新大赛·生活垃圾图片分类 [大赛介绍] 由深圳市政务服务数据管理局.南山区人民政府主办,南山区政务服务数据管理局.华为技术有限公司承办的 ...

最新文章

  1. Python流程控制语句
  2. 微服务实践分享(4)配置中心
  3. 正则匹配字符串无匹配不到_实现简单正则表达式匹配
  4. 数值保留几位小数后四舍五入、向上取值、向下取值、
  5. 怎么样让用户认为产品更有价值?让他们DIY吧!
  6. mysql 镜像备份_手动构建percona-xtrabackup Docker镜像,并实现mysql数据备份
  7. scala编程第18章学习笔记——有状态的对象
  8. 5.0 java集合框架中的接口collection属于_JAVA集合框架 - osc_cyo2dovg的个人空间 - OSCHINA - 中文开源技术交流社区...
  9. 【C/C++】使用PDFLIB创建一个带中文的pdf文件
  10. 国内外公有云对比:功能介绍、性能测试
  11. 图像处理中的深度学习技术
  12. [跟进]_微软关闭MSN博客,腾讯第一时间抢占市场
  13. husky 7 + lint-staged 11+ prettier 2 + eslint 7 配置
  14. 拉网小调(民歌介绍)
  15. 淘宝天猫各平台APP端页面详情api接口调用
  16. 使用 HTML、CSS 和 JavaScript 的简单模拟时钟
  17. 解决C#读取文本文件乱码
  18. Render函数详解
  19. NXP bootloader
  20. load json文件时常见错误以及修正总结(亲测有效)

热门文章

  1. linux sftp put 文件夹,使用sftp命令上传文件夹方法
  2. Windows获取本地安装软件详细信息(对标卸载程序控制面板)
  3. jquery使用 validate 插件进行验证是否通过
  4. Java 动态眨眼 EyesJPanel (整理)
  5. mybatis中显示Type interface com.javacto.dao.UserMapper is not known to the MapperRegistry.
  6. ios引导商店评分问题
  7. wim工具扫描linux磁盘,[V1.30.2011.501版]WimTool -- Wim文件的图形视窗处理工具[无忧首发]...
  8. 什么是开源网络情报?有什么特点?
  9. 最值得用的五款 chrome 插件 Vimium momentum The Great Suspender等 附下载地址。
  10. JS怎么唤醒高德导航