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 ...
随机推荐
- Oracle管理监控之如何对数据库进行监控检查
oracle自动工作负载库(AWR):采集与性能相关的统计数据,并从统计的数据中导出性能量度,以跟踪数据库潜在的问题. 如何生成oracle数据库的自动负载库报告. 手工生成一份oracle数据库的快 ...
- flume学习笔记
#################################################################################################### ...
- Cocos2d比较好的博客
1 .http://blog.csdn.net/bill_man/article/details/7202458 学习笔记 2.http://cocos2d-x.org/ 官网 3.http://ww ...
- AOP与JAVA动态代理
1.AOP的各种实现 AOP就是面向切面编程,我们可以从以下几个层面来实现AOP 在编译期修改源代码 在运行期字节码加载前修改字节码 在运行期字节码加载后动态创建代理类的字节码 2.AOP各种实现机制 ...
- router-link传参 query方式
router.js内的路由配置 { path: '/CreateProgress', name: 'CreateProgress', component:CreateProgress } 传参(q ...
- 【python-opencv】15-图像阈值
[微语]立志要如山,行道要如水.不如山,不能坚定,不如水,不能曲达 import cv2 as cv import numpy as np from matplotlib import pyplot ...
- 【编码备份】1.9从Excel中导入用户名进行测试,用户一次进入系统进行答题测试。
# coding=utf-8 """ Created on 2017年7月31日 @author: candy """ from selen ...
- Mirror--如何对运行中的镜像端点更换证书
如果使用证书配置镜像时,没有设置证书的时间,则默认证书有效期为一年,当证书快过期时,需要更换证书. 下面代码演示如何对正在运行的镜像更换证书 --=========================== ...
- dedecms批量导出新增文章url和标题
百度站长工具推出主动提交功能有一段时间了,可以将新产出链接立即通过此方式推送给百度,以保证新链接可以及时被百度收录.那么dedecms如何批量导出新增文章url呢?你可以用标签调用最新文章,可以用sq ...
- 去掉UITableView多余的分割线
UIView *v = [[UIView alloc] initWithFrame:CGRectZero]; [_tableView setTableFooterView:v];