uniapp项目的结构
<canvas style="width: 750rpx; height: 1100rpx;" canvas-id="firstCanvas" id="firstCanvas"></canvas>
<view>
<u-button class="custom-style" @click="saveImg">保存</u-button>
</view>
uniap项目js部分
onLoad(params) {
this.classData.class_id = params.classId
this.classData.school_id = params.schoolId
if (params.classId && params.schoolId) {
let classId = {
class_id: params.classId,
school_id: params.schoolId,
type: 1
}
getClassQRcodeApi(classId).then(res => {
if (res.status == 200) {
this.codeImg = res.data.qr_url
this.school_name = res.data.school_name;
this.classes_name = res.data.classes_name
const dialogRect = {
width: 750,
height: 750
}
let canvasCtx = uni.createCanvasContext('firstCanvas', this);
canvasCtx.clearRect(0, 0, dialogRect.width, dialogRect.height)
canvasCtx.setFillStyle('#f3af1e')
canvasCtx.fillRect(0, 0, dialogRect.width, dialogRect.height)
canvasCtx.setFillStyle('#fff')
canvasCtx.setFontSize(18)
canvasCtx.setTextAlign('center')
canvasCtx.fillText(this.school_name, 180, 40)
canvasCtx.fillText(this.classes_name, 180, 80)
canvasCtx.drawImage(this.codeImg, 60, 120, 264, 270)
canvasCtx.drawImage('/static/img/codeImg.jpg', 0, 420, 375, 120)
canvasCtx.draw(true);
uni.canvasToTempFilePath({
canvasId: 'firstCanvas',
success: (res) => {
const tempFilePath = res.tempFilePath;
if (uni.getSystemInfoSync().platform === 'ios' || uni.getSystemInfoSync().platform === 'android') {
uni.saveImageToPhotosAlbum({
filePath: tempFilePath,
success: () => {
uni.showToast({
title: '图片已保存',
icon: 'success'
});
},
fail: (err) => {
uni.showToast({
title: '保存图片失败',
icon: 'none'
});
}
});
} else if (uni.getSystemInfoSync().platform === 'h5') {
const a = document.createElement('a');
a.href = tempFilePath;
a.download = 'poster.png';
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
uni.showToast({
title: '图片已下载',
icon: 'success'
});
}
},
fail: (err) => {
uni.showToast({
title: '生成图片失败',
icon: 'none'
});
}
});
}
})
}
},
进来就加载 canvas ,回显到页面,然后点击保存按钮到手机相册上,现在遇到的问题浏览器切换h5页面,在切换 IOS 手机屏幕,或者到其他屏幕,canvasCtx.drawImage('/static/img/codeImg.jpg', 0, 420, 375, 120)跟canvasCtx.setFillStyle('#f3af1e')
没有铺满,请问大佬们,如何修改这段代码,还有点击保存海报图片,用了 canvasCtx.draw(true);
在真机调试环境下切换到这个页面会自动保存海报图片,用户点击保存才存到手机相册里面,而不是自动保存
首先,针对canvasCtx.drawImage
和canvasCtx.setFillStyle
没有铺满的问题,这通常是由于canvas
元素的尺寸与绘制内容的尺寸不一致或者绘制代码本身的问题。由于你的canvas
元素设置了rpx
单位,但绘制代码使用的是px
单位,这可能导致在不同屏幕尺寸下显示不一致。
为了解决这个问题,你应该:
canvas
相同的单位(rpx
或px
)。由于uni-app
主要使用rpx
作为单位,你可能需要根据屏幕尺寸将px
单位转换为rpx
。canvas
的实际尺寸来动态计算绘制内容的位置和大小。其次,关于点击保存海报图片时自动保存的问题,这是因为你调用了canvasCtx.draw(true);
后直接调用了uni.canvasToTempFilePath
。你应该将保存逻辑与绘制逻辑分离,并在用户点击保存按钮时触发保存逻辑。
<canvas style="width: 750rpx; height: 1100rpx;" canvas-id="firstCanvas" id="firstCanvas"></canvas>
<view>
<u-button class="custom-style" @click="saveImg">保存</u-button>
</view>
// ... 省略其他代码 ...
onLoad(params) {
// ... 省略其他代码 ...
if (params.classId && params.schoolId) {
// ... 省略其他代码 ...
// 假设你已经有了绘制函数
this.drawCanvas();
}
},
methods: {
drawCanvas() {
// ... 省略绘制代码 ...
// 注意:这里不调用 canvasCtx.draw(true);
},
saveImg() {
uni.canvasToTempFilePath({
canvasId: 'firstCanvas',
success: (res) => {
// ... 省略保存图片到相册或下载的代码 ...
},
fail: (err) => {
uni.showToast({
title: '生成图片失败',
icon: 'none'
});
}
});
}
}
在上面的代码中,我移除了canvasCtx.draw(true);
的调用,并将绘制逻辑和保存逻辑分离。现在,当你点击保存按钮时,saveImg
方法会被调用,然后保存canvas
的内容到临时文件路径,并根据平台的不同保存到相册或下载。
对于绘制内容的尺寸问题,你需要根据canvas
的实际尺寸(可能是通过uni.getSystemInfoSync().windowWidth
和uni.getSystemInfoSync().windowHeight
获取的)来动态计算每个元素的位置和大小。这将确保在不同屏幕尺寸下,绘制的内容都能正确显示。
这该用什么技术写,求问 eharts需要定位各个位置
本文向大家介绍JavaScript实现使用Canvas绘制图形的基本教程,包括了JavaScript实现使用Canvas绘制图形的基本教程的使用技巧和注意事项,需要的朋友参考一下 由于这两年HTML5火的正热,所以研究了一下,最近有个想法也是要用到HTML的相关功能,所以也要好好学习一把。 好好看了一下Canvas的功能,感觉HTML5在客户端交互的功能性越来越强了,今天看了一下Canvas绘图,
这里的APP版本是vue的版本吗?如何升级该版本?
请问如何绘制圆环,并切除一部分呢? 圆环内部需要透明的以方便放置其他元素
本文向大家介绍HTML5 canvas 9绘制图片实例详解,包括了HTML5 canvas 9绘制图片实例详解的使用技巧和注意事项,需要的朋友参考一下 绘制图片 Var image=new Image(); image.src=” http://img4.duitang.com/uploads/item/201406/25/20140625182321_4MTau.thumb.700_0.jpeg
只能说短小精悍了,时长半小时,会深挖,也不算很底层,属于是纯背八股的同学估计要挂,经常写着代码没怎么准备八股投着玩玩的很对面试官胃口。 1.git用过哪些命令,场景:如果已经commit了代码但是要rollback一下应该用什么命令,如果要从一个分支跳到另一个分支用什么命令。 2.判断数据类型有哪些方法。秒了。typeof 有什么问题(答对数组使用的结果是object,他说不止于此,继续说type
在PhotoShop中有专门的效果工具,Canvas也提供了一些基本的效果接口。这种效果在画布中实现是很简单的,特别是现在你已经掌握了像素的操作方法。 反转颜色 这个效果将反转图像的颜色值。基本方法就是用255减去像素现在的颜色值(150),所得的就是反转后的颜色(255-150=105)。 让我们尝试一些不同的操作,然后看看最后的代码,这里并没有新知识。 var image = new Ima
前面我们讲解了如何创建图形(shape)以及加载图像(image),这一节我们讲述如何通过像素操作从零开始创建图像。 要创建一些像素,需要调用2D渲染上下文的createImageData 方法。通过传入宽度和高度,它会返回一个包含所有常规属性的ImageData对象:width、height和(最重要的)data。data属性所包含的CanvasPixelArray 将保存新的像素,此时它们是不