首页 > 其他分享 >【快应用】画布生成图片分辨率计算

【快应用】画布生成图片分辨率计算

时间:2022-11-14 21:57:39浏览次数:70  
标签:function console log success 分辨率 ctx 生成 画布 data

【现象描述】

使用toTempFilePath()把当前画布指定区域的内容导出生成指定大小的图片,最终保存到手机上的分辨率和设置的destWidth(输出的图片的宽度)、destHeight(输出的图片的高度)不一致的问题。

如图:

cke_279.png

 

【计算方法】

通过device.getInfo获取windowWidth、windowHeight、windowLogicWidth、windowLogicHeight。

公式为:
(1)输出的图片的宽度:windowWidth*destWidth/ windowLogicWidth
(2)输出的图片的高度:windowHeight* destHeight/ windowLogicHeight

以上图demo为例:

cke_949.png

即:

输出的图片的宽度:1080*500/750=720
输出的图片的高度:1995*400/1385=576

 

Demo如下:

<template>

  <!-- There can only be one root node in the template -->

  <div class="container">

    <text class="text">{{message}}</text>

    <image src="../../Common/logo.png" id="image" style="margin-top: 20px"></image>

    <canvas id="1Canvas" style="background-color: #FFFF00; margin-top: 20px" onlongtap="longtapfun" ontouchmove="touchmove" ontouchstart="touchstart"></canvas>

    <input class="buttons" type="button" onclick="click1" value="drawfillStyleforColor"></input>

    <image src="{{imageSrc}}" id="image2" style="margin-top: 20px"></image>

  </div>

</template>

 

<style>

  .container {

    flex-direction: column;

    justify-content: center;

    align-content: center;

    align-items: center;

  }

  .title {

    font-size: 100px;

  }

  #1Canvas {

    width: 500px;

    height: 200px;

  }

  .text {

    font-size: 50px;

    color: #0000ff;

    border: 1px;

  }

</style>

 

<script>

  import media from '@system.media';

  import device from '@system.device'

  module.exports = {

    data: {

      title: 'World',

      message: '',

      testparams: '2',

      imageSrc: ''

    },

    onInit() {

      this.$page.setTitleBar({

        text: 'Canvas',

        textColor: '#ffffff',

        backgroundColor: '#007DFF',

        backgroundOpacity: 0.5

      })

      this.getInfo();

 

    },

    touchstart: function (e) {

      console.log('yyyy' + 'bindtouchstart' + 'e.changedTouches.length =' + e.changedTouches.length)

    },

    touchmove: function (e) {

      console.log('yyyy' + 'bindtouchmove' + ' e.changedTouches.length =' + e.changedTouches.length + e.changedTouches[0].identifier)

    },

    // 获取设备信息

    getInfo() {

      device.getInfo({

        success: function (ret) {

          console.log("handling success:", JSON.stringify(ret));

        },

        fail: function (erromsg, errocode) {

          console.log("message:", erromsg, errocode);

        }

      })

    },

    click1: function () {

      this.message = 'drawfillStyleforColor'

      var test = this.$element('1Canvas')

      var ctx = test.getContext('2d')

      console.log('ctx.fillStyle 555  >> ' + ctx.fillStyle)

      var img = new Image()

      img.src = 'https://developer.huawei.com/dev_index/img/logo_ch.png'

      img.onload = () => {

        console.log('Image load success.')

        var pat = ctx.createPattern(img, 'repeat')

        ctx.rect(0, 0, 500, 200)

        ctx.fillStyle = pat

        console.log('ctx.fillStyle 666  >> ' + ctx.fillStyle)

        ctx.fill()

        test.toTempFilePath({

          x: 0,

          y: 0,

          width: 500,

          height: 400,

          destWidth: 500,

          destHeight: 400,

          fileType: 'png',

          quality: 1.0,

          success: (data) => {

            this.imageSrc = data.uri

            console.log(`Canvas toTempFilePath success ${data.uri}`)

            console.log(`Canvas toTempFilePath success ${data.tempFilePath}`)

          },

          fail: (data) => {

            console.log('Canvas toTempFilePath data =' + data)

          },

          complete: () => {

            console.log('Canvas toTempFilePath complete.')

          }

        })

      }

      img.onerror = function () {

        console.log('Image load fail.')

      }

      media.saveToPhotosAlbum({

        uri: this.imageSrc,

        folderName: 'custom-folder',

        success: function (data) { console.log("save success: "); },

        fail: function (data, code) {

          console.log("handling fail, code=" + code);

        }

      })

    },

    saveToPhotosAlbum() {

 

    },

    errorfun: function () {

      console.log('canvas one rror')

    },

    longtapfun: function () {

      console.log('canvas longtap')

    }

  }

</script>

​欲了解更多更全技术文章,欢迎访问https://developer.huawei.com/consumer/cn/forum/?ha_source=zzh

标签:function,console,log,success,分辨率,ctx,生成,画布,data
From: https://www.cnblogs.com/developer-huawei/p/16890570.html

相关文章

  • postgresql数据库生成GUID
    CREATEorREPLACEFUNCTIONnew_guid()RETURNS"pg_catalog"."varchar"AS$BODY$DECLAREv_seed_valuevarchar(32);BEGINselectmd5(inet_client......
  • 决策树的生成
    一、基本流程首先,什么是决策树。分类决策树模型是一种描述对实例进行分类的树形结构。决策树由结点和有向边组成。结点有两种类型:内部结点和叶节点。内部结点表示一个特......
  • cfssl生成链式自签名证书
    生成大纲总共生成三个证书,一个根证书,一个中间证书签发商,一个服务证书。为方便理解,根证书表示为ca0,中间证书表示为ca1,服务证书表示为server。在本文中,服务证书为生成给harb......
  • 巨蟒python全栈开发-第12天 生成器函数 各种推导式 yield from
    一.今日主要内容总览(重点)1.生成器(目的:帮助我们创建对象)(1)生成器的本质就是迭代器(2)一个一个的创建对象(3)创建生成器的方式:1.生成器函数......
  • 数组:输入学生成绩;判断最值,成绩和
    publicclassDemo1{publicstaticvoidmain(String[]args){Scannerinput=newScanner(System.in);/*System.out.println("输入学生人数:")......
  • C# 图片处理生成缩略图
    C#图片处理生成缩略图 缩略图通常是将图片内容进行一定的缩小展现,或裁剪展现,主要有两个目的,一是提供一定的预览功能,二是节省屏幕展示空间、节省流量。在网站中我们通......
  • Jmeter 快速生成测试报告
    我们使用Jmeter工具进行接口测试或性能测试后一般是通过察看结果数、聚合报告等监听器来查看响应结果。如果要跟领导汇报测试结果,无法直接通过监听器的结果来进行展示和汇......
  • python迭代器和生成器
    1.迭代器1.迭代是访问集合的一种方式,可以记住遍历的位置的对象,int类型和容器类对象不可进行迭代1.int类型不可进行迭代例:num=iter(12345)print(nex......
  • 在ArchLinux中重新生成ssh host keys
    删除原有keysudorm/etc/ssh/ssh_host_*生成新keysudossh-keygen-tdsa-f/etc/ssh/ssh_host_dsa_keysudossh-keygen-trsa-f/etc/ssh/ssh_host_rsa_keys......
  • TVM -TVM/VTA 代码生成流程
    TVM-TVM/VTA 代码生成流程参考文献链接https://chhzh123.github.io/blogs/2020-03-26-tvm-flow/https://krantz-xrf.github.io/2019/10/24/tvm-workflow.html主要介......