HTML5 火焰字體效果教程

HTML5 火焰字體效果教程

這里寫目錄標題

  • HTML5 火焰字體效果教程
    • 前言
    • 項目概述
    • 基本原理
    • 項目結構
    • 詳細實現步驟
      • 1. HTML結構
      • 2. CSS樣式
      • 3. JavaScript實現
    • 代碼詳解
      • 1. 初始化設置
      • 2. 粒子系統
      • 3. 生成粒子
      • 4. 動畫循環
      • 5. 交互控制
    • 擴展和優化建議
    • 總結
    • 完整代碼

前言

在這篇教程中,我們將一步步學習如何使用HTML5 Canvas和JavaScript創建一個逼真的火焰字體效果。這個效果可以讓文字看起來像是被火焰包圍,非常炫酷!
在這里插入圖片描述

項目概述

我們的火焰字體效果具有以下特點:

  • 可以自定義文字內容
  • 可以調整火焰強度
  • 可以選擇不同的火焰顏色
  • 響應式設計,適配不同屏幕尺寸

基本原理

這個效果的核心原理是使用粒子系統來模擬火焰。具體來說:

  1. 我們先在Canvas上繪制文字
  2. 然后獲取文字的像素數據
  3. 在文字像素的位置生成火焰粒子
  4. 讓這些粒子向上飄動并逐漸消失,模擬火焰效果

項目結構

我們的項目包含三個主要文件:

  • index.html: 頁面結構
  • styles.css: 樣式表
  • fire.js: JavaScript代碼實現火焰效果

詳細實現步驟

1. HTML結構

首先,我們需要創建基本的HTML結構:

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>HTML5 逼真火焰字體效果</title><link rel="stylesheet" href="styles.css">
</head>
<body><div class="container"><h1 class="title">調整下面輸入框中的文字</h1><input type="text" id="textInput" value="火焰文字" maxlength="20"><div class="canvas-wrapper"><canvas id="fireCanvas"></canvas></div><div class="controls"><label for="intensitySlider">火焰強度:</label><input type="range" id="intensitySlider" min="1" max="10" value="5"><label for="colorSelect">火焰顏色:</label><select id="colorSelect"><option value="red">紅色</option><option value="blue">藍色</option><option value="green">綠色</option><option value="purple">紫色</option></select></div></div><script src="fire.js"></script>
</body>
</html>

這個HTML結構包含:

  • 一個標題
  • 一個文本輸入框,用于輸入要顯示的文字
  • 一個Canvas元素,用于繪制火焰效果
  • 控制元素:火焰強度滑塊和顏色選擇下拉菜單

2. CSS樣式

接下來,我們添加CSS樣式讓頁面看起來更美觀:

* {margin: 0;padding: 0;box-sizing: border-box;
}body {font-family: 'Microsoft YaHei', '微軟雅黑', Arial, sans-serif;background-color: #111;color: #fff;display: flex;justify-content: center;align-items: center;min-height: 100vh;overflow: hidden;
}.container {display: flex;flex-direction: column;align-items: center;max-width: 800px;width: 100%;padding: 20px;
}.title {margin-bottom: 20px;text-align: center;color: #f8f8f8;text-shadow: 0 0 10px rgba(255, 165, 0, 0.7);
}#textInput {padding: 10px 15px;font-size: 18px;width: 300px;text-align: center;margin-bottom: 20px;background-color: #333;border: 1px solid #555;color: #fff;border-radius: 5px;
}.canvas-wrapper {width: 100%;height: 200px;margin: 20px 0;display: flex;justify-content: center;align-items: center;
}#fireCanvas {background-color: transparent;max-width: 100%;
}.controls {display: flex;flex-wrap: wrap;justify-content: center;align-items: center;gap: 15px;margin-top: 20px;
}label {margin-right: 5px;
}input[type="range"] {width: 150px;height: 8px;background: #333;outline: none;border-radius: 5px;
}select {padding: 5px 10px;background-color: #333;color: #fff;border: 1px solid #555;border-radius: 5px;
}

這些CSS樣式主要是:

  • 設置了深色背景
  • 居中顯示內容
  • 美化輸入框、滑塊和下拉菜單
  • 設置Canvas容器的尺寸

3. JavaScript實現

最后也是最重要的部分,我們通過JavaScript實現火焰效果:

document.addEventListener('DOMContentLoaded', () => {// 獲取DOM元素const canvas = document.getElementById('fireCanvas');const ctx = canvas.getContext('2d');const textInput = document.getElementById('textInput');const intensitySlider = document.getElementById('intensitySlider');const colorSelect = document.getElementById('colorSelect');// 設置畫布尺寸function resizeCanvas() {canvas.width = window.innerWidth > 800 ? 800 : window.innerWidth - 40;canvas.height = 200;}// 初始化參數let particles = [];let fireIntensity = 5;let fireColor = 'red';let text = textInput.value;let animationId;// 粒子類class Particle {constructor(x, y) {this.x = x;this.y = y;this.vx = Math.random() * 2 - 1;  // 水平速度this.vy = -2 - Math.random() * 3; // 垂直速度(向上)this.size = Math.random() * 3 + 2;  // 粒子大小this.life = Math.random() * 80 + 50; // 粒子生命值this.maxLife = this.life;}update() {// 粒子逐漸上升并左右擺動this.x += this.vx * (fireIntensity / 5);this.y += this.vy * (fireIntensity / 5);// 隨機左右飄動效果this.vx += (Math.random() * 0.4 - 0.2);this.vx = Math.min(Math.max(this.vx, -1.5), 1.5);// 粒子生命值減少this.life--;// 粒子逐漸縮小if (this.size > 0.2) {this.size -= 0.05;}}draw() {if (this.life <= 0) return;// 透明度根據生命周期變化const opacity = this.life / this.maxLife;// 根據選擇的顏色創建漸變let gradient;if (fireColor === 'red') {gradient = ctx.createRadialGradient(this.x, this.y, 0, this.x, this.y, this.size);gradient.addColorStop(0, `rgba(255, 255, 255, ${opacity})`);gradient.addColorStop(0.4, `rgba(255, 180, 0, ${opacity})`);gradient.addColorStop(0.8, `rgba(255, 0, 0, ${opacity * 0.8})`);gradient.addColorStop(1, `rgba(0, 0, 0, 0)`);} else if (fireColor === 'blue') {// 藍色火焰漸變gradient = ctx.createRadialGradient(this.x, this.y, 0, this.x, this.y, this.size);gradient.addColorStop(0, `rgba(255, 255, 255, ${opacity})`);gradient.addColorStop(0.4, `rgba(0, 150, 255, ${opacity})`);gradient.addColorStop(0.8, `rgba(0, 50, 255, ${opacity * 0.8})`);gradient.addColorStop(1, `rgba(0, 0, 0, 0)`);} else if (fireColor === 'green') {// 綠色火焰漸變gradient = ctx.createRadialGradient(this.x, this.y, 0, this.x, this.y, this.size);gradient.addColorStop(0, `rgba(255, 255, 255, ${opacity})`);gradient.addColorStop(0.4, `rgba(0, 255, 150, ${opacity})`);gradient.addColorStop(0.8, `rgba(0, 180, 0, ${opacity * 0.8})`);gradient.addColorStop(1, `rgba(0, 0, 0, 0)`);} else if (fireColor === 'purple') {// 紫色火焰漸變gradient = ctx.createRadialGradient(this.x, this.y, 0, this.x, this.y, this.size);gradient.addColorStop(0, `rgba(255, 255, 255, ${opacity})`);gradient.addColorStop(0.4, `rgba(200, 100, 255, ${opacity})`);gradient.addColorStop(0.8, `rgba(128, 0, 255, ${opacity * 0.8})`);gradient.addColorStop(1, `rgba(0, 0, 0, 0)`);}// 繪制粒子ctx.fillStyle = gradient;ctx.beginPath();ctx.arc(this.x, this.y, this.size, 0, Math.PI * 2);ctx.fill();}}// 生成粒子function generateParticles() {// 設置字體大小(根據文本長度自適應)const fontSize = Math.floor(canvas.width / (text.length * 1.5));const finalFontSize = Math.min(Math.max(fontSize, 30), 80);ctx.font = `bold ${finalFontSize}px '微軟雅黑', Arial`;ctx.textAlign = 'center';ctx.textBaseline = 'middle';// 測量文本尺寸const textMetrics = ctx.measureText(text);const textWidth = textMetrics.width;// 臨時畫布用于測量字體像素const tempCanvas = document.createElement('canvas');const tempCtx = tempCanvas.getContext('2d');tempCanvas.width = textWidth + 20;tempCanvas.height = finalFontSize * 1.5;tempCtx.font = ctx.font;tempCtx.textAlign = 'center';tempCtx.textBaseline = 'middle';tempCtx.fillStyle = '#ffffff';tempCtx.fillText(text, tempCanvas.width / 2, tempCanvas.height / 2);// 獲取像素數據const imageData = tempCtx.getImageData(0, 0, tempCanvas.width, tempCanvas.height);const pixels = imageData.data;// 清空現有粒子particles = [];// 根據像素數據創建粒子for (let y = 0; y < tempCanvas.height; y += Math.max(1, Math.floor(5 / (fireIntensity / 5)))) {for (let x = 0; x < tempCanvas.width; x += Math.max(1, Math.floor(5 / (fireIntensity / 5)))) {const index = (y * tempCanvas.width + x) * 4;if (pixels[index + 3] > 128) { // 只在非透明像素處創建粒子const particleX = (canvas.width - textWidth) / 2 + x;const particleY = (canvas.height - finalFontSize) / 2 + y;// 每個點有一定幾率生成粒子if (Math.random() < 0.3) {particles.push(new Particle(particleX, particleY));}}}}}// 動畫循環function animate() {ctx.clearRect(0, 0, canvas.width, canvas.height);// 幀率控制let newParticles = [];// 更新和繪制現有粒子for (let i = 0; i < particles.length; i++) {particles[i].update();particles[i].draw();// 保留還有生命值的粒子if (particles[i].life > 0) {newParticles.push(particles[i]);}}// 更新粒子數組particles = newParticles;// 持續生成新粒子if (particles.length < 500 * (fireIntensity / 5)) {generateParticles();}// 繼續動畫循環animationId = requestAnimationFrame(animate);}// 初始化function init() {resizeCanvas();text = textInput.value;fireIntensity = parseInt(intensitySlider.value);fireColor = colorSelect.value;// 重新生成粒子generateParticles();// 如果已經有動畫在運行,先取消if (animationId) {cancelAnimationFrame(animationId);}// 開始動畫animate();}// 事件監聽window.addEventListener('resize', () => {resizeCanvas();init();});textInput.addEventListener('input', () => {text = textInput.value;init();});intensitySlider.addEventListener('input', () => {fireIntensity = parseInt(intensitySlider.value);});colorSelect.addEventListener('change', () => {fireColor = colorSelect.value;});// 啟動動畫init();
});

代碼詳解

1. 初始化設置

首先,我們在頁面加載完成后獲取所有需要的DOM元素,并設置初始參數:

document.addEventListener('DOMContentLoaded', () => {// 獲取DOM元素const canvas = document.getElementById('fireCanvas');const ctx = canvas.getContext('2d');const textInput = document.getElementById('textInput');const intensitySlider = document.getElementById('intensitySlider');const colorSelect = document.getElementById('colorSelect');// 初始化參數let particles = [];let fireIntensity = 5;let fireColor = 'red';let text = textInput.value;let animationId;// 設置畫布尺寸function resizeCanvas() {canvas.width = window.innerWidth > 800 ? 800 : window.innerWidth - 40;canvas.height = 200;}

2. 粒子系統

火焰效果的核心是粒子系統。我們創建了一個Particle類來表示每個火焰粒子:

class Particle {constructor(x, y) {this.x = x;this.y = y;this.vx = Math.random() * 2 - 1;  // 水平速度this.vy = -2 - Math.random() * 3; // 垂直速度(向上)this.size = Math.random() * 3 + 2;  // 粒子大小this.life = Math.random() * 80 + 50; // 粒子生命值this.maxLife = this.life;}update() {// 粒子逐漸上升并左右擺動this.x += this.vx * (fireIntensity / 5);this.y += this.vy * (fireIntensity / 5);// 隨機左右飄動效果this.vx += (Math.random() * 0.4 - 0.2);this.vx = Math.min(Math.max(this.vx, -1.5), 1.5);// 粒子生命值減少this.life--;// 粒子逐漸縮小if (this.size > 0.2) {this.size -= 0.05;}}draw() {// 繪制粒子的代碼...}
}

每個粒子都有:

  • 位置(x, y)
  • 速度(vx, vy)
  • 大小(size)
  • 生命值(life)

粒子會隨時間上升、左右飄動、變小并最終消失。

3. 生成粒子

我們需要根據文字形狀生成粒子。這是通過以下步驟實現的:

  1. 在一個臨時Canvas上繪制文字
  2. 獲取文字的像素數據
  3. 在文字像素的位置創建粒子
function generateParticles() {// 設置字體大小const fontSize = Math.floor(canvas.width / (text.length * 1.5));const finalFontSize = Math.min(Math.max(fontSize, 30), 80);ctx.font = `bold ${finalFontSize}px '微軟雅黑', Arial`;// 測量文本尺寸const textMetrics = ctx.measureText(text);const textWidth = textMetrics.width;// 創建臨時畫布const tempCanvas = document.createElement('canvas');const tempCtx = tempCanvas.getContext('2d');tempCanvas.width = textWidth + 20;tempCanvas.height = finalFontSize * 1.5;// 在臨時畫布上繪制文字tempCtx.font = ctx.font;tempCtx.textAlign = 'center';tempCtx.textBaseline = 'middle';tempCtx.fillStyle = '#ffffff';tempCtx.fillText(text, tempCanvas.width / 2, tempCanvas.height / 2);// 獲取像素數據const imageData = tempCtx.getImageData(0, 0, tempCanvas.width, tempCanvas.height);const pixels = imageData.data;// 根據像素數據創建粒子for (let y = 0; y < tempCanvas.height; y += Math.max(1, Math.floor(5 / (fireIntensity / 5)))) {for (let x = 0; x < tempCanvas.width; x += Math.max(1, Math.floor(5 / (fireIntensity / 5)))) {const index = (y * tempCanvas.width + x) * 4;if (pixels[index + 3] > 128) { // 只在非透明像素處創建粒子const particleX = (canvas.width - textWidth) / 2 + x;const particleY = (canvas.height - finalFontSize) / 2 + y;// 每個點有一定幾率生成粒子if (Math.random() < 0.3) {particles.push(new Particle(particleX, particleY));}}}}
}

這里的關鍵是我們只在文字的非透明像素位置創建粒子,并且根據火焰強度調整粒子的密度。

4. 動畫循環

最后,我們需要一個動畫循環來更新和繪制所有粒子:

function animate() {ctx.clearRect(0, 0, canvas.width, canvas.height);let newParticles = [];// 更新和繪制現有粒子for (let i = 0; i < particles.length; i++) {particles[i].update();particles[i].draw();// 保留還有生命值的粒子if (particles[i].life > 0) {newParticles.push(particles[i]);}}// 更新粒子數組particles = newParticles;// 持續生成新粒子if (particles.length < 500 * (fireIntensity / 5)) {generateParticles();}// 繼續動畫循環animationId = requestAnimationFrame(animate);
}

在每一幀中,我們:

  1. 清除Canvas
  2. 更新和繪制所有粒子
  3. 移除已經"死亡"的粒子
  4. 如果粒子數量不足,生成新粒子
  5. 請求下一幀動畫

5. 交互控制

我們添加了事件監聽器來實現交互控制:

// 事件監聽
window.addEventListener('resize', () => {resizeCanvas();init();
});textInput.addEventListener('input', () => {text = textInput.value;init();
});intensitySlider.addEventListener('input', () => {fireIntensity = parseInt(intensitySlider.value);
});colorSelect.addEventListener('change', () => {fireColor = colorSelect.value;
});

這樣用戶就可以:

  • 修改文字內容
  • 調整火焰強度
  • 更改火焰顏色

擴展和優化建議

如果你想進一步改進這個效果,可以考慮:

  1. 添加更多顏色選項:可以創建更多種類的火焰顏色,甚至是彩虹漸變效果

  2. 添加背景音效:可以添加火焰燃燒的音效,增強沉浸感

  3. 優化性能:對于移動設備,可以自動降低粒子數量以提高性能

  4. 添加更多文字效果:比如文字閃爍、扭曲等效果

  5. 保存功能:允許用戶保存火焰文字效果為圖片或GIF

總結

通過這個項目,我們學習了:

  1. 如何使用HTML5 Canvas繪制圖形
  2. 如何創建和管理粒子系統
  3. 如何使用requestAnimationFrame實現平滑動畫
  4. 如何獲取和處理Canvas的像素數據
  5. 如何實現用戶交互控制

希望這個教程對你有所幫助!現在,你可以根據自己的需要修改和擴展這個火焰字體效果了。

完整代碼

完整代碼可以在本項目的GitHub倉庫中找到:[https://github.com/hhse/Html]

如果你有任何問題或建議,歡迎在評論區留言!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/85726.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/85726.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/85726.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SMOTE-XGBoost實戰:金融風控中欺詐檢測的樣本不平衡解決方案

1. 行業問題背景 &#xff08;1&#xff09;金融欺詐檢測的特殊性 在支付風控領域&#xff0c;樣本不平衡是核心痛點。Visa 2023年度報告顯示&#xff0c;全球信用卡欺詐率約為0.6%&#xff0c;但單筆欺詐交易平均損失高達$500。傳統機器學習模型在此場景下表現堪憂&#xff1…

Instagram下載保存 -下載狗解析工具

在日常瀏覽Instagram時&#xff0c;是否有過這樣的煩惱&#xff1a;看到一個精彩的視頻&#xff0c;想要保存下來&#xff0c;卻不知道如何操作&#xff1f;有時候我們會看到一些特別的旅行視頻、搞笑片段&#xff0c;甚至是喜歡的名人分享的內容&#xff0c;簡直是舍不得錯過。…

flink如何基于Pekko實現RPC調用

摘要 通過閱讀flink源碼&#xff0c;了解flink是如何基于Pekko實現遠程RPC調用的 Pekko實現遠程調用 Flink 的 RPC 框架底層是構建在 Pekko 的 actor 模型之上的&#xff0c;了解Pekko如何使用&#xff0c;對后續源碼的閱讀有幫助。 Apache Pekko&#xff08;原為 Akka 的一…

Kafka節點注冊沖突問題分析與解決

一、核心錯誤分析 ERROR Error while creating ephemeral at /brokers/ids/1, node already exists and owner does not match org.apache.zookeeper.KeeperException$NodeExistsException: KeeperErrorCode NodeExists問題本質&#xff1a;ZooKeeper中已存在ID為1的broker節…

突破PPO訓練效率瓶頸!字節跳動提出T-PPO,推理LLM訓練速度提升2.5倍

突破PPO訓練效率瓶頸&#xff01;字節跳動提出T-PPO&#xff0c;推理LLM訓練速度提升2.5倍 在大語言模型&#xff08;LLM&#xff09;通過長思維鏈&#xff08;CoT&#xff09;展現出強大推理能力的當下&#xff0c;強化學習&#xff08;RL&#xff09;作為關鍵技術卻面臨訓練…

【Python】dictionary

1 字典功能 字典是可變容器模型&#xff0c;且可存儲任意類型對象&#xff1b; 字典的每個鍵值對 <key: value> 用冒號 : 分割&#xff0c;每個對之間用逗號(,)分割&#xff0c;整個字典包括在花括號 {} 中 ,格式如下所示&#xff1a; d {key1 : value1, key2 : value…

【python】If 語句

1 使用if 進行條件判斷 1.1 檢查字符串是否相等 car bmw car BMW # FALSEcar bmw car.upper() BMW # true # 變小寫用方法&#xff1a;lower1.2 檢查字符串是否不相等 my_car yadeaif my_car ! Audi:print("Buy one! Buy one! Buy one!")1.3 比較數字 answe…

Knife4j 使用詳解

一、概述 Knife4j 是一款基于 Swagger 的開源 API 文檔工具&#xff0c;旨在為 Java 開發者提供更美觀、功能更強大的 API 文檔生成、展示和調試體驗。它是 Swagger-Bootstrap-UI 的升級版&#xff0c;通過增強 UI 界面和擴展功能&#xff0c;解決了原生 Swagger UI 界面簡陋、…

Java excel坐標計算

package com.common.base.util.excel;/*** excel 坐標計算*/ public class UtilExcelPosi {/*** deepseek生成 ExcelProperty(index UtilExcelPosi.pA)*/public final static int pA 0;public final static int pB 1;public final static int pC 2;public final static i…

【JavaWeb】Servlet+JSP 實現分頁功能

文章目錄 思路數據抽出功能設計 功能模塊工具類前端內容用戶端數據處理 思路 數據抽出 需要顯示的數據&#xff0c;查詢的數據抽出&#xff1b;進行分頁顯示&#xff0c;需要統計抽出的件數&#xff0c;然后根據頁面顯示尺寸調整顯示頁面內容&#xff1b; 功能設計 翻頁需要…

SpringBoot-準備工作-工程搭建

目錄 1.創建空項目 2.檢查項目jdk版本 3.檢查Maven的全局配置 4.配置項目的字符集 5.創建SpringBoot工程 1.創建空項目 2.檢查項目jdk版本 3.檢查Maven的全局配置 4.配置項目的字符集 5.創建SpringBoot工程

01、python實現matlab的插值算法,以及驗證

import numpy as np from scipy.interpolate import griddata import sys def griddata_wrapper(x, y, v, xq, yq, method): """ 包裝scipy的griddata函數,支持單個點或多個點的插值 """ try: # 將輸入轉換為numpy數組…

React ahooks——useRequest

目錄 簡介 1. 核心功能 2. 基本用法 3. 高級用法 &#xff08;1&#xff09;輪詢請求&#xff08;Polling&#xff09; &#xff08;2&#xff09;防抖&#xff08;Debounce&#xff09; &#xff08;3&#xff09;依賴刷新&#xff08;refreshDeps&#xff09; &#x…

re正則、Xpath、BeautifulSouplxml 區別

目錄 1. re 正則表達式2. XPath3. BeautifulSoup + lxml4. 功能特性對比5.對比與建議在網頁數據解析中,正則表達式(re)XPath(常結合lxml)BeautifulSoup(常依賴解析器如lxml)是三種主流技術,各有核心差異和適用場景。 1. re 正則表達式 優勢:文本匹配效率高,尤其適用于…

教師辦工專用 資源包|課件+手抄報+PPT模板+常用表格 PDF格式93GB

如果家里親戚或朋友有走上教育之路的人&#xff0c;給他這份整合可以減輕不少工作負擔&#xff0c;更快地適應教育的節奏。也可以發給孩子的老師讓他在平時做個班級活動的參考 《老師教學辦工資源包》包括手抄報大全、教學計劃、工作總結、培訓手冊、課程表等教學、辦公常用資…

算法第37天| 完全背包\518. 零錢兌換 II\377. 組合總和 Ⅳ\57. 爬樓梯

完全背包 完全背包和01背包的區別 純完全背包&#xff0c;遍歷背包和物品的順序是可以對調的&#xff0c;只要求得出最大價值&#xff0c;不要求湊成總和的元素的順序&#xff1b; 01背包&#xff0c;遍歷背包和物品的順序是不可以對調的&#xff08;一維不行&#xff0c;二維…

七彩喜智慧康養平臺:重構銀發生活的數字守護網

隨著社會老齡化程度的不斷加深&#xff0c;如何讓老年人安享幸福晚年成為社會關注的焦點。 在這一背景下&#xff0c;七彩喜智慧康養平臺應運而生&#xff0c;以創新的科技手段和貼心的服務理念&#xff0c;為老年人的生活帶來了諸多好處&#xff0c;發揮著重要作用&#xff0…

【設計模式】用觀察者模式對比事件訂閱(相機舉例)

&#x1f4f7; 用觀察者模式對比事件訂閱(相機舉例) 標簽&#xff1a;WPF、C#、Halcon、設計模式、觀察者模式、事件機制 在日常開發中&#xff0c;我們經常使用 事件機制&#xff08;Event&#xff09; 來訂閱圖像采集信號。然而當系統日益復雜&#xff0c;多個模塊同時需要響…

【數據分析九:Association Rule】關聯分析

一、數據挖掘定義 數據挖掘&#xff1a; 從大量的數據中挖掘那些令人感興趣的、有用的、隱含的、先前未知的 和可能有用的 模式或知識 &#xff0c;并據此更好的服務人們的生活。 二、四類任務 數據分析有哪些任務&#xff1f; 今天我們來講述其中的關聯分析 三、關聯分析 典…

AWS Security Hub郵件告警設置

問題 需要給AWS Security Hub設置郵件告警。 前提 已經啟用AWS Security Hub。 AWS SNS 創建一個AWS Security Hub告警主題SecurityHub-Topic&#xff0c;如下圖&#xff1a; 創建完成后&#xff0c;訂閱該主題。 AWS EventBridge 設置規則名SecurityHubFindings-Rules…