热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

markdownADMIN/WEB图片显示&size优化tradeoff分析

本文由编程笔记#小编为大家整理,主要介绍了markdownADMIN/WEB图片显示&size优化tradeoff分析相关的知识,希望对你有一定的参考价值。
本文由编程笔记#小编为大家整理,主要介绍了markdown ADMIN / WEB图片显示&size优化tradeoff分析相关的知识,希望对你有一定的参考价值。




# ADMIN/WEB 图片显示&size优化 tradeoff分析
## 影响图片size的因素
- Quality (q_85...)
- Dimension
- DPR (1.0, 2.0 - iPhone6/7/8, 3.0 - iPhone6/7/8 Plus/iPhoneX)
- Format (jpg, png, webp)
## 基本概念(术语)
### Format
- 除非特殊情况, 默认上传的图片都会转化为 .jpg 格式
- Admin图片链接部分参数说明
- [f_auto](https://cloudinary.com/documentation/image_transformations#automatic_format_selection),Cloudinary会自动将图片转换为浏览器能接收的最优格式,例如支持 webp的 Chrome
- [fl_lossy](https://cloudinary.com/documentation/image_transformations#applying_lossy_gif_compression),在对显示影响较小的情况下,Cloudinary会对图片进行有损压缩
- [c_fill](https://support.cloudinary.com/hc/en-us/articles/202521222-What-is-the-difference-between-Fill-Fit-and-Limit-scaling-modes-),对图片填充处理,
### Quality
- 图片 [quality默认为90](https://support.cloudinary.com/hc/en-us/articles/202521492-What-is-the-default-JPG-image-quality-for-derived-images-),也即是 q_90, cloudinary 显示的图片size是已经压缩过得size (目前只适用.webp)
### DPR
##### 物理像素(physical pixel)
一个物理像素是显示器(手机屏幕)上最小的物理显示单元,在操作系统的调度下,每一个设备像素都有自己的颜色值和亮度值。
##### 设备独立像素(DPR: density-independent pixel)
设备独立像素(也叫密度无关像素),代表一个可以由程序使用的虚拟像素(比如: css像素),然后由相关系统转换为物理像素。
##### 设备像素比(device pixel ratio )
设备像素比(简称dpr)定义了物理像素和设备独立像素的对应关系,它的值可以按如下的公式的得到:
设备像素比 = 物理像素 / 设备独立像素 // 在某一方向上,x方向或者y方向

在Javascript中,可以通过 [window.devicePixelRatio](https://developer.mozilla.org/en-US/docs/Web/API/Window/devicePixelRatio) 获取到当前设备的dpr。


在css中,可以通过 [-webkit-device-pixel-ratio](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/-webkit-device-pixel-ratio) ,`-webkit-min-device-pixel-ratio` 和 `-webkit-max-device-pixel-ratio` 进行媒体查询,对不同dpr的设备,做一些样式适配(这里只针对webkit内核的浏览器和webview)。
![DPR Illustration](https://res.cloudinary.com/cloudinary/image/upload/dpr_illustration.png)
以 iPhone6为例:
1. iPhone 6 display is 4.7 inches in size with a 16:9 resolution of 1334x750
2. 设备宽高为375×667,也即是设备独立像素(比如: css像素)。
3. 其 dpr为2,即1个css像素对应 4个物理像素(1:4),所以实际size为@2,750×1334。
## 分析
以 Klook 首页 Banner图片 ![](https://res.klook.com/image/upload/banner/y0ehj286wxl4lirq2rdb.jpg) (1920x600, 851.4 KB JPG) 为例
| 图片类型 | 参数 | 大小 | 相对比率 | 备注
| ------ | ------ | ------ | ------ | ------ |
| JPG | 不带参 | 853kb | 444% | 默认图片,尺寸为 1920 * 600,体积大
| WEBP | 不带参 | 192kb | 100% | webp 格式的体积只有 jpg格式的 22.5%
| WEBP | q_100 | 1.3mb | 693% | 相对于默认的 q_90而言,体积特别大 TBD
| WEBP | q_85 | 128kb | 67% | 目前 Klook的图片压缩质量大部分为 q_85
| WEBP | q_60 | 59.5kb | 31% | 发梢开始有点模糊了,图片显示质量下降相对明显了(非 retina屏)
| WEBP | dpr_1.0,w_1920,h_600 | 192kb | 31% | dpr参数需要带 w和 h才能生效,默认为1.0,体积和尺码等价于不带参数的 webp
| WEBP | dpr_2.0,w_1920,h_600 | 364kb | 189.6% | 尺码@2,3840 * 1200
| WEBP | dpr_3.0,w_1920,h_600 | 606kb | 315.6% | 尺码@3,5760 * 1800
1. 当图片像素点个数小于屏幕像素点(物理像素)个数时,图片会就近取色以填充像素,从而造成模糊
- 比如设定css像素为 20×20,20×20的图片在 retina屏下,会被填充为屏幕物理像素大小的图片,也即 40×40
![从小到大](http://www.uml.org.cn/mobiledev/images/201605052.jpg)
2. 当图片像素点个数大于屏幕像素点(物理像素)个数时,图片会通过算法(downsampling)去实现缩小,如此会造成图片缺少一些锐利度或者色差,但不会模糊
- 比如设定css像素为 20×20,40×40的图片在普通屏下,会被压缩为屏幕物理像素大小的图片,也即 20×20
![从大到小](http://www.uml.org.cn/mobiledev/images/201605053.jpg)
3. 只有当图片像素点个数与屏幕像素点(物理像素)个数 1:1 关系,图片才能获得最优的清晰展示
- 比如为了获得 DPR 2.0,css像素为 40×40 的清晰图片展示,需要原始size为80×80的图片,以免被有损放大/缩小


##### 因此,dpr主要作用于 Retina屏下,保证图片的显示效果,而提高高清屏显示效果,需要上传更大的原始size图片(比如@2图)
## 实现
- 自适应DPR
- JS - [脚本控制](https://developer.mozilla.org/en-US/docs/Web/API/Window/devicePixelRatio)
```Javascript
let cOnnection= navigator.connection || navigator.mozConnection || navigator.webkitConnection,
type = connection && connection.effectiveType || '4g', // 网络状态,需兼容不支持该接口的浏览器情况
drp = window.devicePixelRatio || 1,
drpVal = type === '4g' ? drp : 1,
imgUrl = `https://res.klook.com/image/upload/fl_lossy.progressive,q_85,dpr_${drpVal},f_auto/c_fill,,/v1526541190/banner/y0ehj286wxl4lirq2rdb.webp`
```
- CSS - [媒体查询](https://developer.mozilla.org/zh-CN/docs/Web/Guide/CSS/Media_queries)
```css
@media (-webkit-max-device-pixel-ratio: 3) {
i {
background-image: url('...@3.jpg')
}
}
```
- HTML - [响应式图片](https://developer.mozilla.org/zh-CN/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images)
```html
src="elva-fairy-640w.jpg" alt="Elva dressed as a fairy">
```
- 脚本填补 - 先有模糊的图片, 然后再懒加载出比较大的原图,预先加载往后的图片
-
## 限制
`f_auto` & `dpr` 参数只有使用cloudinary CDN 才可以支持。目前无法使用
##### 建议,尽可能的对部分比较重要位置的图片至少进行@2倍的图片上传,并在展示上做高清处理
## Links
- #响应式图片
- #探究WebP一些事儿


推荐阅读
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • CSS3 @font-face 字体应用技术解析与实践
    在Web前端开发中,HTML教程和CSS3的结合使得网页设计更加多样化。长期以来,Web设计师受限于“web-safe”字体的选择。然而,CSS3中的`@font-face`规则允许从服务器端加载自定义字体,极大地丰富了网页的视觉效果。通过这一技术,设计师可以自由选择和使用各种字体,提升用户体验和页面美观度。本文将深入解析`@font-face`的实现原理,并提供实际应用案例,帮助开发者更好地掌握这一强大工具。 ... [详细]
  • 基于Web的Kafka管理工具Kafkamanager首次访问Web界面的详细配置指南(附图解)
    首次访问Kafkamanager Web界面时,需要对Kafka集群进行配置。这一过程相对简单,用户只需依次点击【Cluster】>【Add Cluster】,按照提示完成相关设置即可。本文将通过图文并茂的方式,详细介绍每一步的配置步骤,帮助用户快速上手Kafkamanager。 ... [详细]
  • 开发日志:高效图片压缩与上传技术解析 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • Spring框架中枚举参数的正确使用方法与技巧
    本文详细阐述了在Spring Boot框架中正确使用枚举参数的方法与技巧,旨在帮助开发者更高效地掌握和应用枚举类型的数据传递,适合对Spring Boot感兴趣的读者深入学习。 ... [详细]
  • 在ElasticStack日志监控系统中,Logstash编码插件自5.0版本起进行了重大改进。插件被独立拆分为gem包,每个插件可以单独进行更新和维护,无需依赖Logstash的整体升级。这不仅提高了系统的灵活性和可维护性,还简化了插件的管理和部署过程。本文将详细介绍这些编码插件的功能、配置方法,并通过实际生产环境中的应用案例,展示其在日志处理和监控中的高效性和可靠性。 ... [详细]
  • 本文深入解析了WCF Binding模型中的绑定元素,详细介绍了信道、信道管理器、信道监听器和信道工厂的概念与作用。从对象创建的角度来看,信道管理器负责信道的生成。具体而言,客户端的信道通过信道工厂进行实例化,而服务端则通过信道监听器来接收请求。文章还探讨了这些组件之间的交互机制及其在WCF通信中的重要性。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 体积小巧的vsftpd与pureftpd Docker镜像在Unraid系统中的详细配置指南:支持TLS加密及IPv6协议
    本文详细介绍了如何在Unraid系统中配置体积小巧的vsftpd和Pure-FTPd Docker镜像,以支持TLS加密和IPv6协议。通过这些配置,用户可以实现安全、高效的文件传输服务,适用于各种网络环境。配置过程包括镜像的选择、环境变量的设置以及必要的安全措施,确保了系统的稳定性和数据的安全性。 ... [详细]
  • 如何撰写适应变化的高效代码:策略与实践
    编写高质量且适应变化的代码是每位程序员的追求。优质代码的关键在于其可维护性和可扩展性。本文将从面向对象编程的角度出发,探讨实现这一目标的具体策略与实践方法,帮助开发者提升代码效率和灵活性。 ... [详细]
  • 成都服务器租赁适用于哪些网站业务部署——Vecloud专业解析
    成都,作为四川省的省会,不仅是西南地区唯一的副省级城市,也是国家重要的高新技术产业基地和商贸物流中心。Vecloud专业解析指出,成都服务器租赁服务特别适合各类网站业务的部署,尤其是需要高效、稳定和安全的在线应用。无论是电子商务平台、内容管理系统还是大数据分析,成都的服务器租赁都能提供强大的支持,满足不同企业的需求。 ... [详细]
author-avatar
Simon_Diego
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有