canvas h5 高倍屏模糊

canvas h5 高倍屏模糊

模糊

canvas 默认单位 px 在1倍屏上正常展示,但在 2x、3x 的手机手机上会显示模糊。canvas 的 width、height 属性是画布尺寸,css 是元素尺寸,因为元素尺寸会在 2x、3x 屏幕上放大 2、3 倍,所以会变模糊。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
  <style>
    #canvas {
      background: #999
    }
  </style>
</head>
<body>
  <canvas id="canvas" width="160px" height="96px"></canvas>
</body>
<script>
    const canvas = document.querySelector('#canvas')
    let ctx = canvas.getContext('2d')

    ctx.setTransform(1, -0.52, 0, 1, 60, 60);
    ctx.font = '40px STHeiTi, SimHei'
    ctx.fillStyle="#fff";
    ctx.textAlign = 'center'
    ctx.fillText('¥33.5', 21, 15)
</script>
</html>

这是一个示例:模拟手机端 2x 的情况

JS Bin

解决方式

可以将 canvas 的 width、height 属性放大 2x 或者 3x,元素尺寸不变(px 单位会根据屏幕 dpi 缩放)这样就可以显示清晰的画面

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
  <style>
    #canvas2 {
      background: #19BAFF ;
      width: 160px;
      height: 96px;
    }
  </style>
</head>
<body>
   <canvas id="canvas2" width="320px" height="192px"></canvas>
</body>
<script>
    const canvas2 = document.querySelector('#canvas2')
    let ctx2 = canvas2.getContext('2d')

    ctx2.setTransform(1, -0.52, 0, 1, 130, 120);
    ctx2.font = '80px STHeiTi, SimHei'
    ctx2.fillStyle="#fff";
    ctx2.textAlign = 'center'
    ctx2.fillText('¥33.5', 21, 15)
</script>
</html>
JS Bin

Read more

Flutter入门指南

Flutter入门指南

Flutter 是一个由 Google 开发的开源移动应用开发框架。它允许开发者使用一套代码同时构建 iOS 和 Android 应用,并且提供了丰富的 UI 组件和高效的开发工具,使得开发者能够快速构建出高性能的跨平台应用。 一、Flutter 的实现原理 Flutter 的核心在于其自带的高性能渲染引擎 Skia。不同于其他框架依赖于原生的 UI 组件,Flutter 直接通过 Skia 渲染引擎将所有组件绘制到屏幕上。这种方式保证了跨平台应用在 iOS 和 Android 上的表现完全一致。 1.1 结构概览 Flutter 的架构分为三层: 1. Framework(框架层): 这部分主要由 Dart 编写,提供了 Flutter 的各种 UI 组件(Widget)、手势检测、渲染层以及动画等。

By Lewis
Certbot Let's Encrypt 证书自动续期

Certbot Let's Encrypt 证书自动续期

安装 Certbot yum install epel-release -y yum install certbot -y certbot certonly //生成证书 certbot renew //续期 certbot certificates //查看证书 域名验证插件 https://github.com/ywdblog/certbot-letencrypt-wildcardcertificates-alydns-au 下载 $ git clone https://github.com/ywdblog/certbot-letencrypt-wildcardcertificates-alydns-au $ cd certbot-letencrypt-wildcardcertificates-alydns-au $ chmod 0777 au.sh 配置 DNS API 密钥: 这个 API 密钥什么意思呢?由于需要通过 API 操作阿里云 DNS,

By Lewis