Retina屏下图片模糊怎么解决?
我在用 React 做移动端页面,发现 iPhone 上的 logo 图片特别模糊,明明原图是 2x 的高清图。我试过直接放 2 倍图,但没用,是不是得用 srcset 或者 CSS 处理?
现在代码是这样写的:
function Logo() {
return (
<img
src="/assets/logo@2x.png"
alt="logo"
style={{ width: '100px', height: '40px' }}
/>
);
}
但显示出来还是糊的,难道要强制设置 devicePixelRatio 吗?求指点!
关键问题在于你虽然用了2x图,但是没告诉浏览器这是高分辨率图片。正确的做法是:
1. 把图片的宽高设置成实际尺寸的一半(因为你是2x图)
2. 加个sizes属性告诉浏览器这是高分辨率图片
改完的代码应该是这样:
这样改之后,浏览器就知道这张图是给2倍屏用的,会自动按2x渲染。原理跟WP里面用srcset处理响应式图片是一样的。
顺便吐槽下,retina适配这个坑我当年也踩过,现在看到这种问题就头疼...
1. 首先确保图片确实是高清的,打开原图看看边缘是否锐利
2. 关键点是图片尺寸要匹配 - 你现在设置了100x40的显示尺寸,但@2x图片的实际尺寸应该是200x80
试试这样改:
或者更优雅的CSS方案:
两种方式我都试过效果不错。个人更推荐CSS方案,这样更清晰,还能避免图片加载时的闪烁问题。
对了,记得检查服务器是否正确配置了图片缓存,有时候模糊是因为加载了缩略图。