【vue.js】前端生成随机图片组件

news2024/12/23 11:06:34

文章目录

  • 前言
  • 效果
  • 代码

前言

这是一个前端随机生成图片的组件,可以用作滑块验证组件的背景图。

效果

  • 以下效果是结合滑块验证组件一起构建的。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

代码

<template>
	<img ref="random-image" />
</template>
<script>
export default {
	name: "RandomImg",
	props: {
		width: {
			type: Number,
			default: 400
		},
		height: {
			type: Number,
			default: 220
		}
	},
	mounted() {
		this.init()
	},
	methods: {
		// 生成随机颜色
		getRandomColor() {
			const r = Math.floor(Math.random() * 255)
			const g = Math.floor(Math.random() * 255)
			const b = Math.floor(Math.random() * 255)
			const a = Math.random()
			const color = `rgba(${r}, ${g}, ${b}, ${a})`
			return color
		},
		// 生成随机图案
		getRandomPattern(ctx) {
			const random = Math.floor(Math.random() * 3 + 1)
			if (random == 1) {
				const rectr = Math.floor(Math.random() * 2)
				const rectx = Math.floor(Math.random() * this.width)
				const recty = Math.floor(Math.random() * this.height)
				const rectwidth = Math.floor(Math.random() * this.width)
				const rectheight = Math.floor(Math.random() * this.height)
				if (rectr == 0) {
					ctx.beginPath()
					ctx.strokeStyle = this.getRandomColor()
					ctx.strokeRect(rectx, recty, rectwidth, rectheight)
					ctx.closePath()
				} else {
					ctx.beginPath()
					ctx.fillStyle = this.getRandomColor()
					ctx.fillRect(rectx, recty, rectwidth, rectheight)
					ctx.closePath()
				}
			} else if (random == 2) {
				var arcr = Math.floor(Math.random() * 2)
				var arcx = Math.floor(Math.random() * this.width)
				var arcy = Math.floor(Math.random() * this.height)
				var arcr = Math.floor(Math.random() * this.height)
				if (arcr == 0) {
					ctx.beginPath()
					ctx.strokeStyle = this.getRandomColor()
					ctx.arc(arcx, arcy, arcr, 0, 2 * Math.PI, false)
					ctx.stroke()
					ctx.closePath()
				} else {
					ctx.beginPath()
					ctx.fillStyle = this.getRandomColor()
					ctx.arc(arcx, arcy, arcr, 0, 2 * Math.PI, false)
					ctx.fill()
					ctx.closePath()
				}
			} else if (random == 3) {
				var movex = Math.floor(Math.random() * this.width)
				var movey = Math.floor(Math.random() * this.height)
				var linex = Math.floor(Math.random() * this.width)
				var liney = Math.floor(Math.random() * this.height)
				var linew = Math.floor(Math.random() * this.height / 5)
				ctx.beginPath()
				ctx.strokeStyle = this.getRandomColor()
				ctx.moveTo(movex, movey)
				ctx.lineTo(linex, liney)
				ctx.lineWidth = linew
				ctx.stroke()
				ctx.closePath()
			}
			return ctx
		},
		// canvas转image
		canvasToImage(cvs) {
			const imgDom = this.$refs['random-image']
			imgDom.src = cvs.toDataURL('image/png')
		},
		// 初始化
		init() {
			const canvas = document.createElement('canvas')
			canvas.width = this.width
			canvas.height = this.height
			let context = canvas.getContext('2d')
			context.fillStyle = '#ccc'
			context.fillRect(0, 0, this.width, this.height)
			for (let i = 0; i < 10; i++) {
				context = this.getRandomPattern(context)
			}
			this.canvasToImage(canvas)
		},
		// 刷新图片
		refresh() {
			this.init()
		}
	}
}
</script>
<style scoped>
* {
	user-select: none;
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/450464.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

V2.4版本商超标签专用路由器

PICK_Router_V2.4 产品参数 产品型号 PICK_Router_V2.4 尺寸(mm) 21*14*4.3mm 工作温度 -10-70℃ 产品重量 465g 供电方式 DC12V or POE 工作频率 2.4G 通信速率 50-250kbps 通信方式 10/100Mbps有线网络&2.4G 通信半径 30m 支持标签数量 >10000…

ChatGPT其实并不想让开发人员做这5件事情,但却已经被玩坏了

前言 ChatGPT已经火爆了快半年了吧&#xff0c;紧接着国内也开始推出了各种仿制品&#xff0c;我甚至一度怀疑&#xff0c;如果人家没有推出ChatGPT&#xff0c;这些仿制品会不会出现。而很多人也嗨皮得不行&#xff0c;利用各种方法开始科学上网&#xff0c;用ChatGPT做各种觉…

PostMan笔记(四)Mock服务与API文档管理

1. Mock服务 1.1 为什么使用Mock服务 Postman的Mock服务是一种API模拟工具&#xff0c;可以用于模拟API的行为并返回虚拟的响应。它可以帮助开发人员在实际API实现之前测试和验证API设计&#xff0c;以及在客户端应用程序开发过程中进行测试和调试。 使用Postman的Mock服务可…

SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈(Feign、Gateway)

http客户端Feign &#xff08;一&#xff09;基于Feign远程调用 1、RestTemplate方式调用存在的问题 2、Feign的介绍 3、定义和使用Feign客户端 这个接口里面将来的封装的就是所有对userservice发起的远程调用 1、orderserivce的pom <!--feign客户端依赖--> <depe…

花生壳内网穿透步骤详解,感兴趣的小伙伴可以自己去尝试哦~

花生壳是什么&#xff1f; 花生壳是款具备内网穿透功能的软件。是通过云服务器快速与内网服务器建立连接&#xff0c;同时把内网端口映射到云端&#xff0c;实现各类基于域名的互联网应用服务。花生壳能够实现反向代理应用&#xff0c;支持TCP、HTTP、HTTPS协议&#xff0c;端…

数据结构基础day3

题目&#xff1a;119. 杨辉三角II 我的解法&#xff1a;先将杨辉三角存储起来&#xff0c;取出第rowIndex行 class Solution { public:vector<int> getRow(int rowIndex) {vector<vector<int>> ans(rowIndex1); //初始化rowIndex1行的杨辉三角for(int i0; …

贾其萃 : 笃行实践 筑梦扬帆 | 提升之路系列(二)

导读 为了发挥清华大学多学科优势&#xff0c;搭建跨学科交叉融合平台&#xff0c;创新跨学科交叉培养模式&#xff0c;培养具有大数据思维和应用创新的“π”型人才&#xff0c;由清华大学研究生院、清华大学大数据研究中心及相关院系共同设计组织的“清华大学大数据能力提升项…

如何开发一款用户体验优秀的语音交友app?

在数字时代&#xff0c;人们越来越依赖智能手机上的应用程序来与他人进行交流。其中&#xff0c;语音交友app成为了最受欢迎的应用之一。然而&#xff0c;开发一款成功的语音交友app需要深入了解用户需求与体验。本文将探讨如何开发一款用户体验优秀的语音交友app。 着眼于用户…

微信小程序uniapp基于Android的大学生社交论坛交流app系统

实现一个基于Android的社交APP小程序,一共3个身份&#xff0c;包括老师、学生和管理员&#xff0c;其中老师和学生在手机端注册登录&#xff0c;管理员在web端后台登录。学生和老师登录后可以查询通知新闻信息&#xff0c;收藏信息&#xff0c;查看好友推荐&#xff0c;论坛发帖…

短视频app开发:如何实现实时短视频录制功能

简介 在当今的移动互联网时代&#xff0c;短视频app已经成为了人们生活中不可或缺的一部分。短视频app的数量和用户量都在不断增加。如今&#xff0c;越来越多的人开始关注短视频app的开发&#xff0c;尤其是如何实现实时短视频录制功能。本文将分享如何开发短视频app并实现实…

【TS】1660- 4 个 TypeScript 5.1 Beta 版重要更新内容

TypeScript 5.1 在 5.0 发布后不久就发布了测试版&#xff0c;但测试版不代表最终正式版。 官方原文 Announcing TypeScript 5.1 Beta(https://devblogs.microsoft.com/typescript/announcing-typescript-5-1-beta/) 中提供了完整的更新内容&#xff0c;以下是我梳理了 4 个 T…

总结829

学习目标&#xff1a; 4月&#xff08;复习完高数18讲内容&#xff0c;背诵21篇短文&#xff0c;熟词僻义300词基础词&#xff09; 学习内容&#xff1a; 暴力英语&#xff1a;背完第5轮核心词&#xff0c;那些没掌握的还是没掌握&#xff0c;必须重点揪出来&#xff0c;单独…

QT QPainter坐标系统和坐标变换

一、坐标变换函数 QPainter 在窗口上绘图的默认坐标系统如图下图所示&#xff0c;这是绘图设备的物理坐标。为了绘图的方便&#xff0c;QPainter 提供了一些坐标变换的功能&#xff0c;通过平移、旋转等坐标变换&#xff0c;得到一个逻辑坐标系统&#xff0c;使用逻辑坐标系统…

021:Mapbox GL加载arcgis地图(影像瓦片图)

第020个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中加载arcgis地图(影像瓦片图)。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共80行)相关API参考:专栏目标示例效果 配置方式 1)查看基础设置…

【数据库】MySQL的聚合查询,联合查询及关键字的执行顺序

目录 1.聚合查询 1.1聚合函数 1.2GROUP BY子句 1.3HAVING 2.联合查询 联合查询步骤 2.1内连接 2.2外连接 2.3自连接 2.4子查询 单行子查询 多行子查询 2.5合并查询 UNION UNION ALL 3.SQL关键字的使用顺序 3.1语法顺序 3.2执行顺序 1.聚合查询 聚合查询是SQ…

快速将PDF转换为图片:使用在线转换器的步骤

PDF文件是一种常见的文档格式&#xff0c;但在某些情况下需要将其转换为图片格式&#xff0c;例如将PDF文件插入PPT演示文稿中。此时&#xff0c;使用在线PDF转换器是一种快速且简便的方法。 本文将介绍如何使用在线转换器将PDF文件转换为图片格式。 步骤1&#xff1a;选择合…

Three.js+TypeScript+Webpack学习记录(三)

使用环境参考 Node.js v16.19.1 正文 独立功能文件 我们不可能一直在 index.ts 中写代码&#xff0c;分离文件&#xff1a; // init.ts import * as THREE from threeexport const initScene () > {const scene new THREE.Scene()scene.background new THREE.Color(wh…

【多线程】Java中是如何保证多线程间的数据共享的?

文章目录 前言一、Java的内存模型二、保证可见性的方式volatilesynchronizedlockfinal 三、volatile的底层实现总结 前言 在讨论这个问题之前&#xff0c;我们可以先瞅瞅Java的内存模型JMM&#xff0c;JMM可不要和JVM混为一谈。我们说的是内存模型JMM&#xff08;Java Memory …

JavaSE-06 [面向对象OOP + 封装]

JavaSE-06 [面向对象OOP 封装] 第一章 面向对象思想 1.1 面向过程和面向对象 面向过程&#xff1a; 面向过程就是分析出解决问题所需要的步骤&#xff0c;然后用函数把这些步骤一步一步实现&#xff0c;使用的时候一个一个依次调用就可以了面向对象&#xff1a; 面向对象是…

博弈论(NIM游戏——取石子)相关的题目

1.异或的性质 &#x1f3f3;️‍&#x1f308;&#x1f3f3;️‍&#x1f308;&#x1f3f3;️‍&#x1f308;&#x1f3f3;️‍&#x1f308;&#x1f3f3;️‍&#x1f308;&#x1f3f3;️‍&#x1f308; 2.nim游戏 &#xff08;基础&#xff09; 891. Nim游戏 - AcWin…