uniapp vue3 使用画布分享或者收藏功能

使用HBuilder X 开发小程序,大多数的画布插件很多都是vue2的写法,vue3的很少

我自己也试了很多个插件,但是有一些还是有问题,不好用

海报画板 - DCloud 插件市场  先将插件导入项目中

自己项目亲自用过,功能基本是完善的,大家可以在链接去看示例

大概样式写一下,大家也可以按照我的格式粘贴

动态数据就循环放在一个view 中给他塞进去就可以了 

如果大家想不显示图片,生成画布之后会返回一个地址图片,显示这个图片加一个hidden 就可以了

<l-painter ref="painter" @done="getthumb" hidden />

let painter = ref(null);
// 画布初始数据

let poster = ref({
	css: {
		// 根节点若无尺寸,自动获取父级节点
		width: '750rpx',
		height: '1200rpx',
		backgroundImage: `url(https://mpapi.sstlab.cn/images/bg_orbital.png)`
	},
	views: [
		{
			css: {
				height: '100rpx',
				width: '100%',
				display: 'flex',
				justifyContent: 'center',
				alignItems: 'center',
				paddingTop: '80rpx',
				boxSizing: 'border-box',
				marginBottom: '80rpx'
			},
			views: [
				{
					src: 'https://mpapi.sstlab.cn/images/time_conversio.png',
					type: 'image',
					css: {
						objectFit: 'cover',
						objectPosition: '50% 50%',
						width: '40rpx',
						height: '40rpx'
					}
				},
				{
					text: '时间转换',
					type: 'text',
					css: {
						verticalAlign: 'middle',
						paddingLeft: '10rpx',
						color: '#64c4ff'
					}
				}
			],
			type: 'view'
		},
		{
			css: {
				height: '820rpx'
			},
			views: [],
			type: 'view'
		}
	],
	type: 'view'
});
//画布成功后转化为图片
const getthumb = () => {
	wx.hideLoading();
	painter.value.canvasToTempFilePathSync({
		fileType: 'jpg',
		// 如果返回的是base64是无法使用 saveImageToPhotosAlbum,需要设置 pathType为url
		pathType: 'url',
		quality: 1,
		success: (res) => {
			wx.previewImage({
				urls: [res.tempFilePath]
			});
		}
	});
};

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 3 和 Uniapp 中,绘制 Canvas2D 并生成图片的方法也大致相同,具体实现步骤如下: 1. 在 `template` 中添加 `canvas` 标签,设置宽高和 `ref`。 ``` <canvas ref="myCanvas" style="width: 100%; height: 100%;"></canvas> ``` 2. 在 `setup` 中使用 `onMounted` 钩子函数获取 `canvas` 上下文对象,并进行绘制。绘制完成后可以通过 `toDataURL` 方法将画布转换为 base64 编码的图片数据。 ``` import { ref, onMounted } from 'vue'; export default { setup() { const canvasRef = ref(null); const imageUrl = ref(''); onMounted(() => { const canvas = canvasRef.value; const ctx = canvas.getContext('2d'); ctx.fillStyle = '#ffffff'; ctx.fillRect(0, 0, 100, 100); ctx.fillStyle = '#000000'; ctx.font = 'normal 20px sans-serif'; ctx.fillText('Hello, World!', 10, 50); imageUrl.value = canvas.toDataURL('image/png'); }); return { canvasRef, imageUrl }; } } ``` 3. 生成的 base64 编码的图片数据可以通过 `img` 标签的 `src` 属性显示在页面中。 ``` <template> <div> <canvas ref="myCanvas" style="width: 100%; height: 100%;"></canvas> <img :src="imageUrl" style="width: 100%; height: 100%;"> </div> </template> ``` 完整代码示例: ``` <template> <div> <canvas ref="myCanvas" style="width: 100%; height: 100%;"></canvas> <img :src="imageUrl" style="width: 100%; height: 100%;"> </div> </template> <script> import { ref, onMounted } from 'vue'; export default { setup() { const canvasRef = ref(null); const imageUrl = ref(''); onMounted(() => { const canvas = canvasRef.value; const ctx = canvas.getContext('2d'); ctx.fillStyle = '#ffffff'; ctx.fillRect(0, 0, 100, 100); ctx.fillStyle = '#000000'; ctx.font = 'normal 20px sans-serif'; ctx.fillText('Hello, World!', 10, 50); imageUrl.value = canvas.toDataURL('image/png'); }); return { canvasRef, imageUrl }; } } </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值