【快应用】画布生成图片分辨率计算
2023-09-11 14:20:23 时间
【现象描述】
使用toTempFilePath()把当前画布指定区域的内容导出生成指定大小的图片,最终保存到手机上的分辨率和设置的destWidth(输出的图片的宽度)、destHeight(输出的图片的高度)不一致的问题。
如图:
【计算方法】
通过device.getInfo获取windowWidth、windowHeight、windowLogicWidth、windowLogicHeight。
公式为:
(1)输出的图片的宽度:windowWidth*destWidth/ windowLogicWidth
(2)输出的图片的高度:windowHeight* destHeight/ windowLogicHeight
以上图demo为例:
即:
输出的图片的宽度: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 onerror')
},
longtapfun: function () {
console.log('canvas longtap')
}
}
</script>
欲了解更多更全技术文章,欢迎访问https://developer.huawei.com/consumer/cn/forum/?ha_source=zzh
相关文章
- UDS协议从入门到精通系列:附录表应用
- 【MATLAB教程案例13】基于SA模拟退火优化算法的函数极值计算matlab仿真及其他应用
- 科技云报道:云原生应用时代加速到来,云计算基础设施重塑进行时
- 电商社交数据在大数据风控的应用实践
- 智能计算及其应用--蚁群算法
- 智能计算及其应用--进化算法与遗传算法
- 超简单获取快应用摘要值
- 《iOS应用开发》——2.2节九个基本的程序构建块
- iOS应用开发---返回到指定界面
- 私有云计算的发展与应用
- Django 4.x Models App settings 模型应用设置
- Python + Flask = 更简单的云原生应用开发
- 应用案例 | 从Storm到Flink,有赞五年实时计算效率提升实践
- 《Linux嵌入式实时应用开发实战(原书第3版)》——3.7 shell
- 云计算如何应用于无人机植保?
- 浅析MySQL中的计算列(Generated Column列)与计算字段的介绍与应用-如何让数据库中某个字段随时间自动更新
- 浅析<router-view> v-slot 事例和应用
- 云计算在企业中的应用越来越重要
- 银监会:推进互联网、大数据、云计算应用
- 国际开源社区OW2成立快应用兴趣小组,助推快应用生态发展
- 视频应用多元化 以视频为核心的运营服务兴起
- 【机器视觉】——单目相机标定(张正友标定)、畸变矫正、重投影误差计算、pnp问题求解、实际尺寸测量、标定参数矩阵应用
- 应用开发安全问题不断?Cybric帮助开发者实现安全检测自动化
- 云计算应用是节省成本还是增加额外费用?
- 人们应用开始考虑认知计算