javaScript蓝桥杯----图⽚⽔印⽣成

news2024/11/22 5:54:01

目录

  • 一、介绍
  • 二、准备
  • 三、⽬标
  • 四、代码
  • 五、完成


一、介绍

很多⽹站都会通过给图⽚添加⽔印的形式来标记图⽚来源,维护版权。前端⽣成⽔印通常是通过canvas 实现,但实际上我们也可以直接利⽤ CSS 来实现图⽚⽔印,这样做会有更好的浏览器兼容
性。
本题中你将封装⼀个创建⽂字⽔印的函数。

二、准备

开始答题前,需要先打开本题的项⽬代码⽂件夹,⽬录结构如下:

├── css
│ └── style.css
├── images
│ └── origin.png
├── index.html
└── js
├── dom-to-image.min.js
└── index.js

其中:

  • index.html 是主⻚⾯。
  • css/style.css 是样式⽂件。
  • js/index.js 是需要补充代码的 js ⽂件。
  • js/dom-to-image.min.js 是⽣成图⽚的第三⽅库,此⽂件⽆需修改。
  • images/origin.png 是项⽬中的原始图⽚⽂件。

在浏览器中预览 index.html ⻚⾯效果如下所示
在这里插入图片描述

三、⽬标

请完善 js/index.js ⽂件中的 TODO 部分,实现创建⽔印函数的功能 ,创建的⽔印需要使⽤<span> 标签展示。
createWatermark 函数参数说明:
在这里插入图片描述
完成后的效果如下:
在这里插入图片描述

四、代码

index.htmll

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <link rel="stylesheet" href="css/style.css" />
    <title>图片水印生成</title>
  </head>

  <body>
    <main>
      <div class="container">
        <img src="images/origin.png" alt="cat" />
      </div>
      <button>保存图片</button>
    </main>
    <script src="js/dom-to-image.min.js"></script>
    <script src="js/index.js"></script>
  </body>
</html>

style.css

main {
  display: flex;
  align-items: center;
  flex-direction: column;
}

.container {
  width: 700px;
  display: inline-block;
  position: relative;
}

.container img {
  width: 100%;
  height: 100%;
}

.watermark {
  width: 100%;
  height: 100%;
  position: absolute;
  top: 0;
  left: 0;
  pointer-events: none;
  white-space: nowrap;
  overflow: hidden;
}

.watermark span {
  line-height: 30px;
  display: inline-block;
  position: relative;
  top: 50%;
  transform: translateY(-50%);
  font: "sans serif";
}

button {
  display: block;
  margin-top: 1rem;
  border: none;
  padding: 1rem 1.5rem;
  cursor: pointer;
  border-radius: 5px;
}

button:active {
  background-color: gainsboro;
}

images—>origin.png
在这里插入图片描述
dom-to-image.min.js

/*!
 * Powered by uglifiyJS v2.6.1, Build by http://tool.uis.cc/jsmin/
 * build time: Tue Mar 21 2023 14:53:38 GMT+0800 (中国标准时间)
*/
!function(global){"use strict";function toSvg(node,options){function applyOptions(clone){return options.bgcolor&&(clone.style.backgroundColor=options.bgcolor),options.width&&(clone.style.width=options.width+"px"),options.height&&(clone.style.height=options.height+"px"),options.style&&Object.keys(options.style).forEach(function(property){clone.style[property]=options.style[property]}),clone}return options=options||{},copyOptions(options),Promise.resolve(node).then(function(node){return cloneNode(node,options.filter,!0)}).then(embedFonts).then(inlineImages).then(applyOptions).then(function(clone){return makeSvgDataUri(clone,options.width||util.width(node),options.height||util.height(node))})}function toPixelData(node,options){return draw(node,options||{}).then(function(canvas){return canvas.getContext("2d").getImageData(0,0,util.width(node),util.height(node)).data})}function toPng(node,options){return draw(node,options||{}).then(function(canvas){return canvas.toDataURL()})}function toJpeg(node,options){return options=options||{},draw(node,options).then(function(canvas){return canvas.toDataURL("image/jpeg",options.quality||1)})}function toBlob(node,options){return draw(node,options||{}).then(util.canvasToBlob)}function copyOptions(options){"undefined"==typeof options.imagePlaceholder?domtoimage.impl.options.imagePlaceholder=defaultOptions.imagePlaceholder:domtoimage.impl.options.imagePlaceholder=options.imagePlaceholder,"undefined"==typeof options.cacheBust?domtoimage.impl.options.cacheBust=defaultOptions.cacheBust:domtoimage.impl.options.cacheBust=options.cacheBust}function draw(domNode,options){function newCanvas(domNode){var canvas=document.createElement("canvas");if(canvas.width=options.width||util.width(domNode),canvas.height=options.height||util.height(domNode),options.bgcolor){var ctx=canvas.getContext("2d");ctx.fillStyle=options.bgcolor,ctx.fillRect(0,0,canvas.width,canvas.height)}return canvas}return toSvg(domNode,options).then(util.makeImage).then(util.delay(100)).then(function(image){var canvas=newCanvas(domNode);return canvas.getContext("2d").drawImage(image,0,0),canvas})}function cloneNode(node,filter,root){function makeNodeCopy(node){return node instanceof HTMLCanvasElement?util.makeImage(node.toDataURL()):node.cloneNode(!1)}function cloneChildren(original,clone,filter){function cloneChildrenInOrder(parent,children,filter){var done=Promise.resolve();return children.forEach(function(child){done=done.then(function(){return cloneNode(child,filter)}).then(function(childClone){childClone&&parent.appendChild(childClone)})}),done}var children=original.childNodes;return 0===children.length?Promise.resolve(clone):cloneChildrenInOrder(clone,util.asArray(children),filter).then(function(){return clone})}function processClone(original,clone){function cloneStyle(){function copyStyle(source,target){function copyProperties(source,target){util.asArray(source).forEach(function(name){target.setProperty(name,source.getPropertyValue(name),source.getPropertyPriority(name))})}source.cssText?target.cssText=source.cssText:copyProperties(source,target)}copyStyle(window.getComputedStyle(original),clone.style)}function clonePseudoElements(){function clonePseudoElement(element){function formatPseudoElementStyle(className,element,style){function formatCssText(style){var content=style.getPropertyValue("content");return style.cssText+" content: "+content+";"}function formatCssProperties(style){function formatProperty(name){return name+": "+style.getPropertyValue(name)+(style.getPropertyPriority(name)?" !important":"")}return util.asArray(style).map(formatProperty).join("; ")+";"}var selector="."+className+":"+element,cssText=style.cssText?formatCssText(style):formatCssProperties(style);return document.createTextNode(selector+"{"+cssText+"}")}var style=window.getComputedStyle(original,element),content=style.getPropertyValue("content");if(""!==content&&"none"!==content){var className=util.uid();clone.className=clone.className+" "+className;var styleElement=document.createElement("style");styleElement.appendChild(formatPseudoElementStyle(className,element,style)),clone.appendChild(styleElement)}}[":before",":after"].forEach(function(element){clonePseudoElement(element)})}function copyUserInput(){original instanceof HTMLTextAreaElement&&(clone.innerHTML=original.value),original instanceof HTMLInputElement&&clone.setAttribute("value",original.value)}function fixSvg(){clone instanceof SVGElement&&(clone.setAttribute("xmlns","http://www.w3.org/2000/svg"),clone instanceof SVGRectElement&&["width","height"].forEach(function(attribute){var value=clone.getAttribute(attribute);value&&clone.style.setProperty(attribute,value)}))}return clone instanceof Element?Promise.resolve().then(cloneStyle).then(clonePseudoElements).then(copyUserInput).then(fixSvg).then(function(){return clone}):clone}return root||!filter||filter(node)?Promise.resolve(node).then(makeNodeCopy).then(function(clone){return cloneChildren(node,clone,filter)}).then(function(clone){return processClone(node,clone)}):Promise.resolve()}function embedFonts(node){return fontFaces.resolveAll().then(function(cssText){var styleNode=document.createElement("style");return node.appendChild(styleNode),styleNode.appendChild(document.createTextNode(cssText)),node})}function inlineImages(node){return images.inlineAll(node).then(function(){return node})}function makeSvgDataUri(node,width,height){return Promise.resolve(node).then(function(node){return node.setAttribute("xmlns","http://www.w3.org/1999/xhtml"),(new XMLSerializer).serializeToString(node)}).then(util.escapeXhtml).then(function(xhtml){return'<foreignObject x="0" y="0" width="100%" height="100%">'+xhtml+"</foreignObject>"}).then(function(foreignObject){return'<svg xmlns="http://www.w3.org/2000/svg" width="'+width+'" height="'+height+'">'+foreignObject+"</svg>"}).then(function(svg){return"data:image/svg+xml;charset=utf-8,"+svg})}function newUtil(){function mimes(){var WOFF="application/font-woff",JPEG="image/jpeg";return{woff:WOFF,woff2:WOFF,ttf:"application/font-truetype",eot:"application/vnd.ms-fontobject",png:"image/png",jpg:JPEG,jpeg:JPEG,gif:"image/gif",tiff:"image/tiff",svg:"image/svg+xml"}}function parseExtension(url){var match=/\.([^\.\/]*?)$/g.exec(url);return match?match[1]:""}function mimeType(url){var extension=parseExtension(url).toLowerCase();return mimes()[extension]||""}function isDataUrl(url){return-1!==url.search(/^(data:)/)}function toBlob(canvas){return new Promise(function(resolve){for(var binaryString=window.atob(canvas.toDataURL().split(",")[1]),length=binaryString.length,binaryArray=new Uint8Array(length),i=0;length>i;i++)binaryArray[i]=binaryString.charCodeAt(i);resolve(new Blob([binaryArray],{type:"image/png"}))})}function canvasToBlob(canvas){return canvas.toBlob?new Promise(function(resolve){canvas.toBlob(resolve)}):toBlob(canvas)}function resolveUrl(url,baseUrl){var doc=document.implementation.createHTMLDocument(),base=doc.createElement("base");doc.head.appendChild(base);var a=doc.createElement("a");return doc.body.appendChild(a),base.href=baseUrl,a.href=url,a.href}function uid(){var index=0;return function(){function fourRandomChars(){return("0000"+(Math.random()*Math.pow(36,4)<<0).toString(36)).slice(-4)}return"u"+fourRandomChars()+index++}}function makeImage(uri){return new Promise(function(resolve,reject){var image=new Image;image.onload=function(){resolve(image)},image.onerror=reject,image.src=uri})}function getAndEncode(url){var TIMEOUT=3e4;return domtoimage.impl.options.cacheBust&&(url+=(/\?/.test(url)?"&":"?")+(new Date).getTime()),new Promise(function(resolve){function done(){if(4===request.readyState){if(200!==request.status)return void(placeholder?resolve(placeholder):fail("cannot fetch resource: "+url+", status: "+request.status));var encoder=new FileReader;encoder.onloadend=function(){var content=encoder.result.split(/,/)[1];resolve(content)},encoder.readAsDataURL(request.response)}}function timeout(){placeholder?resolve(placeholder):fail("timeout of "+TIMEOUT+"ms occured while fetching resource: "+url)}function fail(message){resolve("")}var request=new XMLHttpRequest;request.onreadystatechange=done,request.ontimeout=timeout,request.responseType="blob",request.timeout=TIMEOUT,request.open("GET",url,!0),request.send();var placeholder;if(domtoimage.impl.options.imagePlaceholder){var split=domtoimage.impl.options.imagePlaceholder.split(/,/);split&&split[1]&&(placeholder=split[1])}})}function dataAsUrl(content,type){return"data:"+type+";base64,"+content}function escape(string){return string.replace(/([.*+?^${}()|\[\]\/\\])/g,"\\$1")}function delay(ms){return function(arg){return new Promise(function(resolve){setTimeout(function(){resolve(arg)},ms)})}}function asArray(arrayLike){for(var array=[],length=arrayLike.length,i=0;length>i;i++)array.push(arrayLike[i]);return array}function escapeXhtml(string){return string.replace(/#/g,"%23").replace(/\n/g,"%0A")}function width(node){var leftBorder=px(node,"border-left-width"),rightBorder=px(node,"border-right-width");return node.scrollWidth+leftBorder+rightBorder}function height(node){var topBorder=px(node,"border-top-width"),bottomBorder=px(node,"border-bottom-width");return node.scrollHeight+topBorder+bottomBorder}function px(node,styleProperty){var value=window.getComputedStyle(node).getPropertyValue(styleProperty);return parseFloat(value.replace("px",""))}return{escape:escape,parseExtension:parseExtension,mimeType:mimeType,dataAsUrl:dataAsUrl,isDataUrl:isDataUrl,canvasToBlob:canvasToBlob,resolveUrl:resolveUrl,getAndEncode:getAndEncode,uid:uid(),delay:delay,asArray:asArray,escapeXhtml:escapeXhtml,makeImage:makeImage,width:width,height:height}}function newInliner(){function shouldProcess(string){return-1!==string.search(URL_REGEX)}function readUrls(string){for(var match,result=[];null!==(match=URL_REGEX.exec(string));)result.push(match[1]);return result.filter(function(url){return!util.isDataUrl(url)})}function inline(string,url,baseUrl,get){function urlAsRegex(url){return new RegExp("(url\\(['\"]?)("+util.escape(url)+")(['\"]?\\))","g")}return Promise.resolve(url).then(function(url){return baseUrl?util.resolveUrl(url,baseUrl):url}).then(get||util.getAndEncode).then(function(data){return util.dataAsUrl(data,util.mimeType(url))}).then(function(dataUrl){return string.replace(urlAsRegex(url),"$1"+dataUrl+"$3")})}function inlineAll(string,baseUrl,get){function nothingToInline(){return!shouldProcess(string)}return nothingToInline()?Promise.resolve(string):Promise.resolve(string).then(readUrls).then(function(urls){var done=Promise.resolve(string);return urls.forEach(function(url){done=done.then(function(string){return inline(string,url,baseUrl,get)})}),done})}var URL_REGEX=/url\(['"]?([^'"]+?)['"]?\)/g;return{inlineAll:inlineAll,shouldProcess:shouldProcess,impl:{readUrls:readUrls,inline:inline}}}function newFontFaces(){function resolveAll(){return readAll(document).then(function(webFonts){return Promise.all(webFonts.map(function(webFont){return webFont.resolve()}))}).then(function(cssStrings){return cssStrings.join("\n")})}function readAll(){function selectWebFontRules(cssRules){return cssRules.filter(function(rule){return rule.type===CSSRule.FONT_FACE_RULE}).filter(function(rule){return inliner.shouldProcess(rule.style.getPropertyValue("src"))})}function getCssRules(styleSheets){var cssRules=[];return styleSheets.forEach(function(sheet){try{util.asArray(sheet.cssRules||[]).forEach(cssRules.push.bind(cssRules))}catch(e){}}),cssRules}function newWebFont(webFontRule){return{resolve:function(){var baseUrl=(webFontRule.parentStyleSheet||{}).href;return inliner.inlineAll(webFontRule.cssText,baseUrl)},src:function(){return webFontRule.style.getPropertyValue("src")}}}return Promise.resolve(util.asArray(document.styleSheets)).then(getCssRules).then(selectWebFontRules).then(function(rules){return rules.map(newWebFont)})}return{resolveAll:resolveAll,impl:{readAll:readAll}}}function newImages(){function newImage(element){function inline(get){return util.isDataUrl(element.src)?Promise.resolve():Promise.resolve(element.src).then(get||util.getAndEncode).then(function(data){return util.dataAsUrl(data,util.mimeType(element.src))}).then(function(dataUrl){return new Promise(function(resolve,reject){element.onload=resolve,element.onerror=reject,element.src=dataUrl})})}return{inline:inline}}function inlineAll(node){function inlineBackground(node){var background=node.style.getPropertyValue("background");return background?inliner.inlineAll(background).then(function(inlined){node.style.setProperty("background",inlined,node.style.getPropertyPriority("background"))}).then(function(){return node}):Promise.resolve(node)}return node instanceof Element?inlineBackground(node).then(function(){return node instanceof HTMLImageElement?newImage(node).inline():Promise.all(util.asArray(node.childNodes).map(function(child){return inlineAll(child)}))}):Promise.resolve(node)}return{inlineAll:inlineAll,impl:{newImage:newImage}}}var util=newUtil(),inliner=newInliner(),fontFaces=newFontFaces(),images=newImages(),defaultOptions={imagePlaceholder:void 0,cacheBust:!1},domtoimage={toSvg:toSvg,toPng:toPng,toJpeg:toJpeg,toBlob:toBlob,toPixelData:toPixelData,impl:{fontFaces:fontFaces,images:images,util:util,inliner:inliner,options:{}}};"undefined"!=typeof module?module.exports=domtoimage:global.domtoimage=domtoimage}(this);

index.js

/**
 * 创建一个文字水印的div
 * @param  {string} text - 水印文字
 * @param  {string} color - 水印颜色
 * @param  {number} deg - 水印旋转角度
 * @param  {number} opacity - 水印透明度
 * @param  {number} count - 水印数量
 */
function createWatermark(text, color, deg, opacity, count) {
  // 创建水印容器
  const container = document.createElement('div')
  container.className = 'watermark'

  // TODO: 根据输入参数创建文字水印

  return container
}

// 以下代码不需要修改
// 调用createWatermark方法,创建图片水印
const watermark = createWatermark('WaterMark', 'white', 45, 0.5, 11)
// 将水印挂载到图片容器上
const container = document.querySelector('.container')
container.appendChild(watermark)

// 提供图片保存功能
const button = document.querySelector('button')
button.addEventListener('click', () => {
  domtoimage.toJpeg(document.querySelector('.container')).then((dataUrl) => {
    const link = document.createElement('a')
    link.download = 'image.jpeg'
    link.href = dataUrl
    link.click()
  })
})

五、完成

index.js

/**
 * 创建一个文字水印的div
 * @param  {string} text - 水印文字
 * @param  {string} color - 水印颜色
 * @param  {number} deg - 水印旋转角度
 * @param  {number} opacity - 水印透明度
 * @param  {number} count - 水印数量
 */
function createWatermark(text, color, deg, opacity, count) {
  // 创建水印容器
  const container = document.createElement('div')
  container.className = 'watermark'

  // TODO: 根据输入参数创建文字水印
  for (let i = 0; i < count; i++) {
    const span = document.createElement('span')
    span.style.color = color
    span.style.transform = `rotate(${deg}deg)`
    span.style.opacity = opacity
    span.innerText += text
    container.appendChild(span)
  }

  return container
}

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

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

相关文章

全球前十!小米积极推动5G标准制定,科技引领高速发展

5G是推动人类社会数字化转型升级的关键支撑&#xff0c;为打造全移动和全连接的智能社会提供技术基础&#xff0c;巨大且深刻地改变着我们的生活。 近日&#xff0c;中国信息通信研究院发布了《全球5G标准必要专利及标准提案研究报告&#xff08;2023年&#xff09;》&#xff…

【新版】系统架构设计师 - 纲要章节汇总

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 随时更新&#xff0c;请持续关注 … \color{#FF7D00}随时更新&#xff0c;请持续关注… 随时更新&#xff0c;请持续关注… 文章目录 上午题 - 综合知识计算机公共基础知识架构核心知识新增技术知识知识点地图 下午…

免费的配音软件--- tts-vue 软件 下载安装过程

视频效果 tts-vue 软件 图片效果 软件包含有; 语言: 高棉语(柬埔寨) 马耳他语(马耳他) 马来语(马来西亚) 马拉雅拉姆语(印度) 马拉地语(印度) 马其顿语(北马其顿) 韩语(韩国) 阿拉伯语(黎巴嫩) 阿拉伯语(阿昙) 阿拉伯语(阿拉伯联合酋长国) 阿拉伯语(阿尔及利亚) 阿拉伯语(约…

高速信号处理卡 光纤接入卡 设计方案: 519-基于ZU19EG的4路100G光纤的PCIe 加速计算卡

519-基于ZU19EG的4路100G光纤的PCIe 加速计算卡 一、板卡概述 本板卡系我司自主设计研发&#xff0c;基于Xilinx公司Zynq UltraScale MPSOC系列SOC XCZU19EG-FFVC1760架构&#xff0c;支持PCIE Gen3x16模式。其中&#xff0c;ARM端搭载一组64-bit DDR4&#xff0c;总容…

Vue.js 中的 $emit 和 $on 方法有什么区别?

Vue.js 中的 $emit 和 $on 方法有什么区别&#xff1f; 在 Vue.js 中&#xff0c;$emit 和 $on 方法是两个常用的方法&#xff0c;用于实现组件间的通信。它们可以让我们在一个组件中触发一个自定义事件&#xff0c;并在另一个组件中监听这个事件&#xff0c;从而实现组件间的…

【AI实战】大语言模型(LLM)有多强?还需要做传统NLP任务吗(分词、词性标注、NER、情感分类、知识图谱、多伦对话管理等)

【AI实战】大语言模型&#xff08;LLM&#xff09;有多强&#xff1f;还需要做传统NLP任务吗&#xff08;分词、词性标注、NER、情感分类、多伦对话管理等&#xff09; 大语言模型大语言模型有多强&#xff1f;分词词性标注NER情感分类多伦对话管理知识图谱 总结 大语言模型 大…

PIC16F18877学习(一)

为什么要在PIC控制器中使用#pragma configs 这些设置位于程序代码之外的闪存中。 PIC一通电&#xff0c;它们就可用了&#xff0c;无论它们写在代码的哪个位置。这很重要&#xff0c;因为有时在执行程序之前需要它们。例如&#xff0c;有一些设置可以选择时钟源&#xff0c;并…

Docker 安装 Jenkins 并部署 Maven 项目

一、前言 在开始之前&#xff0c;我们需要保证系统中已经安装了Docker、JDK、Maven。 二、Docker 拉取镜像 我这里使用的是 2.344 版本的 Jenkins&#xff0c;拉取命令如下&#xff1a; docker pull jenkins/jenkins:2.344需要稍微等一会&#xff0c;等待拉取完成。 镜像下载…

GIT码云SSH公钥配置

前言&#xff1a;当你想要从Git码云上克隆或推送代码时&#xff0c;需要进行身份验证。为了进行身份验证&#xff0c;Git码云使用SSH协议&#xff0c;其中包含一个公钥和一个私钥。公钥存储在你的计算机上&#xff0c;并与你的Git码云账户相关联。私钥则必须保密&#xff0c;只…

阿里云学生服务器申请攻略(先学生认证然后完成实验任务)

阿里云学生服务器免费申请&#xff0c;之前是云翼计划学生服务器9元/月&#xff0c;现在是高校计划&#xff0c;学生服务器可以免费申请&#xff0c;先完成学生认证即可免费领取一台云服务器ECS&#xff0c;配置为2核2G、1M带宽、40G系统盘&#xff0c;在云服务器ECS实例过期之…

ROS:VScode开发话题(msg)、服务(srv)、动作(action)、TF,解决 无法打开源文件

一.解决 无法打开源文件 出错原因&#xff1a;系统没有找到.h文件对应的路径。 在编写完msg、srv、action文件后&#xff0c;要进行编译&#xff08;catkin_make&#xff09; . 编译之后&#xff0c;msg、srv、action会生成相应的.h文件。 其对应的.h文件目录在devel/includ…

python解决坐标系两点之间有多少种走法问题

问题&#xff1a;在坐标系中第一象限内的点P&#xff08;x,y&#xff09; x<6&#xff0c;y<6. 到终点&#xff08;5,5&#xff09;有多少种走法&#xff1f;并显示出现所经过的点坐标 限制条件&#xff1a;从起点坐标只能向上或者向右走。其中&#xff08;4,3&…

从零开始学习JavaScript:轻松掌握编程语言的核心技能⑥

从零开始学习JavaScript&#xff1a;轻松掌握编程语言的核心技能⑥ 1. JavaScript 对象2. JavaScript 类3. JavaScript prototype&#xff08;原型对象&#xff09;4. prototype 继承5. JavaScript Number 对象5.1 JavaScript 数字 6. JavaScript 字符串&#xff08;String&…

某麦网apk抢票接口加密参数分析(一)

某麦网apk抢票接口加密参数分析&#xff08;一&#xff09; 当下的一些火爆活动&#xff0c;如音乐节、演唱会等需要购买门票的活动&#xff0c;常常会引发一些网络抢票软件的出现。 而某麦网也不例外&#xff0c;很多人使用抢票软件来抢购某些活动的门票。 为了防止这种情况…

基于决策树的泰坦尼克号数据集回归预测

目录 1、作者介绍2、决策树算法2.1 决策树原理2.1.1 基本原理2.1.2 节点的概念 2.2 构建决策树2.3 决策树优缺点 3、实验设计3.1 数据集简介3.2 代码实现3.3 运行结果 4、参考链接 1、作者介绍 任正福&#xff0c;男&#xff0c;西安工程大学电子信息学院&#xff0c;2022级研…

【大数据工具】Kafka伪分布式、分布式安装和Kafka-manager工具安装与使用

Kafka 安装 Kafka 安装包下载地址&#xff1a;https://archive.apache.org/dist/kafka/ 1. Kafka 伪分布式安装 1. 上传并解压 Kafka 安装包 使用 FileZilla 或其他文件传输工具上传 Kafka 安装包&#xff1a;kafka_2.11-0.10.0.0.tgz解压安装包 [rootbigdata software]# …

为什么添加缓存要在释放锁之前?

为什么加缓存要放在释放锁之前&#xff1f; 线程拿到锁会去查缓存是否有数据&#xff0c;又因为我们向redis存入缓存数据是在释放锁之后 那么释放锁之后&#xff0c;下一个线程查缓存&#xff0c;上一个线程并未存入完成。此时就会出现查询多次数据库的情况&#xff0c;锁失效…

chatgpt赋能python:Python如何重复运行——让你的代码运行更高效

Python如何重复运行——让你的代码运行更高效 Python作为一种非常流行的编程语言&#xff0c;在程序员中间被广泛使用。无论是从事科学计算、数据分析还是网页爬虫&#xff0c;都离不开Python。但是&#xff0c;如果你只会最基础的Python语法&#xff0c;你可能会花费更多的时…

《三维存储芯片技术》----学习记录(一)

第1章 NAND存储器的生态 1.1 存储器行业变迁 可以说近10年是整个存储行业历史上变化最大的10年。 1.1.1 NAND及存储器供应商的整合 如图1.1所示&#xff0c;过去6年中&#xff0c;全球存储器95%的供应集中到5家厂商。 图片来源于《三维存储芯片技术》 1.1.2 NAND技术发展 …

行业应用|立仪光谱共焦位移传感器在玻璃方面的检测

项目&#xff1a;玻璃管管壁单边测厚 行业应用|立仪光谱共焦位移传感器在玻璃方面的检测 行业应用|立仪光谱共焦位移传感器在玻璃方面的检测 检测方案 用D35A7镜头对玻璃管管壁进行单边测厚&#xff0c;取三个点静态测量厚度并记录重复性。 1、采用D35A7R2S35镜头对玻璃管管…