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宽中(独立像素)。

时间: 2024-08-26 04:14:38

devicePixelRatio手机图片模糊的原因的相关文章

【手机网页】手机网页显示图片模糊问题

[本文原创,谢绝转载] [总结] 1.手机浏览器,不管是UC.原生浏览器.safari,显示页面都是按照320px的 2.由于现在手机的宽度都大于320px,所以,图片会模糊 3.像苹果的retina屏幕的方式学习! 先把图片做成两倍长宽的大小,然后通过css样式强制做成原大小 [手机网页]手机网页显示图片模糊问题,布布扣,bubuko.com

移动端高清适配方案(解决图片模糊问题、1px细线问题)

本文介绍了移动端适配的3种方法,以及移动端图片模糊问题和1px细线问题的解决方法.当然了,在这之前先整理了与这些方法相关的知识:物理像素.设备独立像素.设备像素比和viewport. >>>>物理像素.设备独立像素和设备像素比 在CSS中我们一般使用px作为单位,需要注意的是,CSS样式里面的px和物理像素并不是相等的.CSS中的像素只是一个抽象的单位,在不同的设备或不同的环境中,CSS中的1px所代表的物理像素是不同的.在PC端,CSS的1px一般对应着电脑屏幕的1个物理像素,但

WPF_界面_图片模糊解决之道整理

原因分析与解决方案: 1. 检查图片,png, DPI=72,Stretch="None",原图尺寸和xaml里面写的尺寸一致.如果替换为大尺寸的原图,使用时,size写的小一点,同比例缩小,没问题. 2. 像素对齐,SnapsToDevicePixels="True". 3. 把图片拷贝到空白的项目里面,发现有的图片模糊,有的不模糊.布局复杂一点,模糊的概率大. 4. 改变项目中的xaml 布局,神奇的出现了,左右两个边清晰了,上下还是模糊的,换个地方,上下左右都

【小程序】--------------处理canvas导出图片模糊问题-------------【劉】

一.业务需求: 使用canvas在前端生成海报,并在海报上添加上水印.最后导出图片并保存到本地. 二.业务逻辑实现: (1)创建canvas画布======>(2)在canvas上绘制海报========>(3)绘制水印===========>(4)绘制完成,导出图片路径=========>(5)保存到本地,并可以分享,(长按保存图片) 三.代码实现: (1).创建画布并将图片和水印绘制到canvas上const ctx = wx.createCanvasContext('myCa

css3简单实现图片模糊过滤效果

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head>     <meta http-equiv="Cont

TML5如何在移动网页端调用手机图片或者camera

TML5如何在移动网页端调用手机图片或者camera可以参考这篇文章: 如果你开始基于iOS系统(ios6 above) 的web应用,可以考虑这段代码: 点击按钮,会调用你的摄像头相册 附源码文件: <input type="file" capture="camera" accept="image/*" id="cameraInput" name="cameraInput">

手机图片转换文字识别方法

手机图片转换文字识别方法 iPhone6这款设计图出自设计师卡萨巴-纳吉之手,而在他眼中的iPhone6应该朝着透明的方向靠拢.因而,他将该设备打造成了一款极薄.透明,且内置有可互动玻璃外观的"神机".据悉,设计图中的iPhone6拥有一个内置有LED灯的HOME键,只有在用户按下时才会亮起.而且,该手机还具备有全息投影功能,可以将手机画面投射到一块相对更宽的背景中.最炫酷的就是拍照技术,FaceTime 摄像头提供与 iSight 摄像头相同的曝光控制功能,想要调节照片或视频的明暗,

cocos2dx3.x 图片模糊解决方法

最近做cocos2dx ,由于在window平台上运行的游戏,故出很多问题,图片模糊就是其中一个. 下面给出我的解决方案,(由于用的cocostudio 加载的图片文件,故只能改源码解决了)(个人建议还是最好不要改源码) cocostudio文件加载进来后都会将图片放入cache里面. 故我们找到TextureCache类(即CCTextureCache)在里面添加一个公共函数 // add by xxj 2014/08/25 11:33:18 // 设置抗锯齿 void setAliasTex

iOS CoreImage/图片模糊处理(一)

CoreImage 是从 iOS5.0开始引入,其功能强大不由惊叹. 不管是扫一扫,生成二维码,人脸识别,图片压缩,滤镜等处理,应有竟有. 图片模糊是从6.0开始支持,下面我们从一个简单的例子看起. 首先介绍一个对象 : CIImage 不是 UIImage. CIImage是CoreImage中的图片对象. 常用的创建的方式是 <span style="font-size:14px;">+ (CIImage *)imageWithContentsOfURL:(NSURL