devicePixelRatio手机图片模糊的原因
一、移动设备图片模糊问题
手机上图片模糊问题原因就是一个像素在电脑上和手机上代表的实际像素的不同。
我们在样式表中使用的px(独立像素)单位其实并不一定代表着实际的一个像素(物理像素),这还要看硬件的设置。例如下面盗来的图片,右图一个独立像素等于四个像素,左图一个独立像素等于一个像素。devicePixelRatio为表示这个比例的值,如果设备宽度为640物理像素,320独立像素,则devicePixelRatio为640/320=2,一个独立像素等于4个物理像素。
所以,如果切了一张10像素宽高的图放在devicePixelRatio为2的屏幕中,设置宽高为10px,实际上就是在20像素宽高的区域中放了一张10像素的图片,而图片被拉长为20像素,这样就糊了。如果要完美显示得放一张20像素宽高的图。
二、解决办法
所以我们可以根据设备的devicePixelRatio给出不同的样式。
如果用脚本可以用window.devicePixelRatio进行判断,目前在移动设备基本支持该属性。
用css可以用媒体查询,例如:
@media only screen and (-webkit-min-device-pixel-ratio : 1.5),only screen and (min-device-pixel-ratio : 1.5){ //样式 } @media only screen and (-webkit-min-device-pixel-ratio : 2),only screen and (min-device-pixel-ratio : 2){ //样式 }
注意:用媒体查询device-width的值在ios和android是不一样的,一个代表独立像素一个代表物理像素,就跟用window.screen.width取屏幕宽度一样,在两个系统上取得的值也是不一样的。
现在主流的智能手机devicePixelRatio大部分为2,一部分为1.5,3的比较少,1的则更少(PC为1)。
三、关于viewport
这里主要讲一下width和scale两个属性,经过粗略测试:
Ios上:如果没有设置width而设置了initial-scale,那么width = device-width / initial-scale;如果没有设置initial-scale而设置了width,那么scale=device-width/width。
Android上:如果没有设置width而设置了initial-scale,那么width = device-width;如果没有设置initial-scale而设置了width,那么scale=device-width/width。
所以,如果想让图片在手机上显示正常,也可以利用viewport,例如在iphone5s上,device-width为320,物理像素宽度为640,可以在viewport中设置width为640(独立像素),scale为0.5,则图片可以在屏幕中完好显示,相当于把640宽压到了320宽中(独立像素)。
devicePixelRatio手机图片模糊的原因的更多相关文章
- 移动端高清适配方案(解决图片模糊问题、1px细线问题)
本文介绍了移动端适配的3种方法,以及移动端图片模糊问题和1px细线问题的解决方法.当然了,在这之前先整理了与这些方法相关的知识:物理像素.设备独立像素.设备像素比和viewport. >> ...
- 解决WPF图片模糊最佳方法(绑定PixelWidth与PixelHeight)
从事WPF开发一年有余,对于图片显示模糊相信很多人都遇到过.网络上查找能得到一堆解决方法,但都是会带来其他负面影响得不到最佳效果.其实,有些图片会因为垂直分辨率/水平分辨率不同而造成在WPF界面上显示 ...
- vue中使用html2canvas及解决html2canvas截屏图片模糊问题
最近在项目中用到了html2canvas插件,遇到的一些坑写下来,与大家共勉. html2canvas 官方网站http://html2canvas.hertzen.com/index.html 这 ...
- WPF图片模糊的解决之路
设计稿转为xaml后,设计师开始review UI了,发现图片都模糊了. 这一张很神奇,三个图片都是同一张,中间的那个最清楚,上面的这个左右两边清楚,下面的那个四个边都不清楚. 这一张,右边是原图,左 ...
- 【转】解决WPF图片模糊最佳方法(绑定PixelWidth与PixelHeight)
解决WPF图片模糊最佳方法(绑定PixelWidth与PixelHeight) 转载自:http://www.360doc.com/content/13/1126/09/10504424_332211 ...
- css3图片模糊过滤效果
css3图片过滤效果,鼠标放上后其它图片模糊,鼠标所在位置的图片是清淅的,有效索引出当前的图片,对图片的模糊处理是本特效的亮点,你完全可以将模糊的效果应用于其它的图片特效中,你同样也可借此代码研究一下 ...
- TML5如何在移动网页端调用手机图片或者camera
TML5如何在移动网页端调用手机图片或者camera可以参考这篇文章: 如果你开始基于iOS系统(ios6 above) 的web应用,可以考虑这段代码: 点击按钮,会调用你的摄像头相册 附源码文件: ...
- dedecms幻灯片调用图片模糊的解决办法
dedecms幻灯片调用的是缩略图,如果图片尺寸比例和幻灯片的大小相差太大的话,图片就会自动拉伸模糊,比较影响美观和用户体验,下面就有常用的2个方法来解决这个图片模糊的问题. 第一种:手动制图 我们用 ...
- UWP 图片模糊
先看一下效果: 这是微识别的个人中心页面,顶部有头像,以及背景图片模糊. 要实现这样的效果,有两种方法. 第一种麻烦点,也是我现在用的.想看简单的,翻到最后 1. 首先看一下xaml代码: <S ...
随机推荐
- strut2的标签
DIY部落 新闻中心 交流论坛 千寻搜索 点击浏览该栏目下的更多电子书 收藏本站 struts2标签详解 文章整理: www.diybl.com 文章来源: 网络 去论坛 建我的b ...
- iOS多线程编程之创建线程(转载)
一.创建和启动线程简单说明 一个NSThread对象就代表一条线程 (1)创建.启动线程 NSThread *thread = [[NSThread alloc] initWithTarget:sel ...
- javaScript高级教程(三) javaScript不支持关联数组,只是语法上像关联数组
1.在js中所有要素都是继承自Object对象的,任何对象都能通过obj['name'] = something的形式来添加属性,相当于obj.name=something. 之所以设计中括号这种存取 ...
- 群用户通过微信小程序可以更好地协作了
今天,小程序向开发者开放了群ID的接口能力.简单地说,就是当你把小程序分享在群聊中,被点击后开发者可获取群ID和群名称,也方便更好地针对群场景提供个性化服务.不同的群有各自的群ID,那么这个新能力开发 ...
- dedecms利用addfields body在首页调用文章内容
开源程序比较好的一点是可以进行二次开发,比如ytkah想要开发一个专家出诊表的功能模块,如下图所示,每天的专家都不一样,可以用到内容模型,但是相对比较复杂:我们可以把每天的坐诊情况写成一篇文章再通过调 ...
- React Native开发之IDE(Atom+Nuclide)安装,运行,调试
版权声明:本文为博主原创文章,如需转载请注明出处 目录(?)[-] 前言 MacWindowsLinux 准备工作 安装Atom 安装Nuclide 新建一个工程 自动补全 类型标注 语法检查 跳 ...
- 用Python实现的数据结构与算法:开篇
一.概述 用Python实现的数据结构与算法 涵盖了常用的数据结构与算法(全部由Python语言实现),是 Problem Solving with Algorithms and Data Struc ...
- Centos 集群配置SSH免登陆脚本
首先编写脚本生成集群服务器列表: hostsList.sh #!/bin/bash preIp="11.11.225." pwd="dyj2017" for i ...
- storm介绍,核心组件,编程模型
一.流式计算概念 利用分布式的思想和方法,对海量“流”式数据进行实时处理,源自业务对海量数据,在“时效”的价值上的挖掘诉求,随着大数据场景应用场景的增长,对流式计算的需求愈发增多,流式计算的一般架构图 ...
- 机器学习理论基础学习10--- 高斯混合模型GMM
一.什么是高斯混合模型? 高斯混合模型(Gaussian Mixed Model)指的是多个高斯分布函数的线性组合,理论上GMM可以拟合出任意类型的分布,通常用于解决同一集合下的数据包含多个不同的分布 ...