图片生成box-shadow并下载

news/2024/9/18 15:08:25/ 标签: javascript, 前端, 开发语言

把图片生成由box-shadow拼接成的阴影组成的图片

html

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>图片生成阴影html</title></head><body><input id="file" type="file" /><button id="btn">制作</button><script src="./index.js"></script></body>
</html>

js

javascript">(function () {// 获取元素const files = document.getElementById('file');const btn = document.getElementById('btn');// 添加事件btn.addEventListener('click', () => {const file = files.files[0];if (!file) {alert('请选择图片');return;}// 创建 FileReader 对象 获取文件信息const reader = new FileReader();reader.readAsDataURL(file);reader.onload = function (e) {// 创建 img 元素const img = document.createElement('img');img.src = e.target.result;// img 加载完成img.onload = function () {// 创建 canvas 元素const canvas = document.createElement('canvas');const ctx = canvas.getContext('2d');// 设置 canvas 宽高canvas.width = img.width;canvas.height = img.height;// 将图片绘制到 canvas 上ctx.drawImage(img, 0, 0);// 获取图片的像素数据const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);// 获取图片的 box-shadow 值const boxShadow = getBoxShadows(imageData);// 生成html文件的字符串const html = montageHtml(boxShadow);// 生成html文件downloadHtml(html);};};});// 获取图片的 box-shadow 值function getBoxShadows(imageData) {let boxShadow = '';// 遍历像素数据 获取每个像素的 RGBA 值  X Y 坐标for (let i = 0; i < imageData.data.length; i += 4) {const r = imageData.data[i];const g = imageData.data[i + 1];const b = imageData.data[i + 2];const a = imageData.data[i + 3];const x = (i / 4) % canvas.width;const y = Math.floor(i / 4 / canvas.width);// 拼接box shadowif (boxShadow) {boxShadow += `,${x}px ${y}px 1px rgba(${r}, ${g}, ${b})`;} else {boxShadow += `${x}px ${y}px 1px rgba(${r}, ${g}, ${b})`;}}return boxShadow;}// 生成html文件 并下载function downloadHtml(html) {const blob = new Blob([html], { type: 'text/html' });const url = URL.createObjectURL(blob);const a = document.createElement('a');a.href = url;a.download = 'box-shadow.html';a.click();URL.revokeObjectURL(url);}function montageHtml(boxShadow) {const html = `<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>div {width: 1px;height: 1px;box-shadow: ${boxShadow};}</style></head><body><div></div></body></html>`;return html;}
})();


http://www.ppmy.cn/news/1517210.html

相关文章

【焕新】同为科技(TOWE)23周年庆典

每年的8月23日&#xff0c;都是一个值得铭记、守护、欢庆的日子。这一天同为科技&#xff08;TOWE&#xff09;迎来公司成立23周年纪念日&#xff0c;是属于TOWE品牌向前、长远的里程碑。从2001到2024&#xff0c;从品牌与文化&#xff0c;从产品到服务。 同为科技&#xff08;…

Python自动化办公2.0 课程更新

之前的课程&#xff0c;包含了Python pandassklearn 数据分析&#xff0c;和Stremlit 可视化仪表盘的开发 和一系列自动化项目案例的开发&#xff0c;包括我们封装了ztl-uia 模块&#xff0c;可以同时自动化操控windows 软件和浏览器, 封装的模块&#xff0c;针对为付费学员使…

【AI模型:追求全能还是专精?】

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《热点时事》 期待您的关注 目录 引言 ​编辑 一&#xff1a;AI模型的全面评估和比较 二&#xff1a;AI模型的专精化和可扩展性…

微软正式确认将在近期关闭经典Windows控制面板

微软在不断测试并为 Windows 添加新功能的同时&#xff0c;也在不断淘汰一些公司认为不再需要的功能。这些功能会被添加到Windows 过时功能的列表中&#xff0c;最近的一项功能是 Paint 3D&#xff0c;该公司宣布它很快就会被淘汰。 与微软似乎希望尽早取消的"3D 画图&quo…

uniapp video标签无法播放视频

当video标签路径含有中文以及特殊字符视频就会无法播放 解决方法使用encodeURIComponent对路径进行加密处理 videoSrc data.coursewareFile? ${appConfig.apiUrl encodeURIComponent(data.coursewareFile)}: "";最后效果

内衣洗衣机和手洗哪个干净?五款高评分内衣洗衣机实测分享!

在日常生活中&#xff0c;内衣洗衣机已成为现代家庭必备的重要家电之一。选择一款耐用、质量优秀的内衣洗衣机&#xff0c;不仅可以减少洗衣负担&#xff0c;还能提供高效的洗涤效果。然而&#xff0c;市场上众多内衣洗衣机品牌琳琅满目&#xff0c;让我们往往难以选择。那么&a…

增材制造(3D打印):为何备受制造业瞩目?

在科技浪潮的推动下&#xff0c;增材制造——即3D打印技术&#xff0c;正逐步成为制造业领域的璀璨新星&#xff0c;吸引了航空航天、汽车、家电、电子等众多行业的目光。那么&#xff0c;是什么让3D打印技术如此引人注目并广泛应用于制造领域&#xff1f;其背后的核心优势又是…

应用软件初始化的优缺点,读写ini,json,xml...

读写 INI 文件和读写 JSON 文件是两种常见的数据存储方式&#xff0c;它们各自有不同的优缺点&#xff0c;适用于不同的应用场景。以下是它们的一些比较&#xff1a; 读写 INI 文件 优点&#xff1a; 人类可读性&#xff1a;INI 文件格式简单&#xff0c;易于人类阅读和编辑…

2024前端面试题-js篇

1.js有哪些数据类型 基础数据类型&#xff1a;string,number,boolean&#xff0c;null&#xff0c;undefined&#xff0c;bigInt&#xff0c;symbol 引用数据类型&#xff1a;Object 2.js检测数据类型的方式 typeof&#xff1a;其中数组、对象、null都会被判断为object&…

Jupyter 的可视化 Debug

Jupyter 这种工具虽然有很好的交互性能&#xff0c;但其也明白&#xff0c;对于大型代码库&#xff0c;最好还是用传统的 IDE 比较靠谱。 因此为了弥补这一缺陷&#xff0c;Jupyter 项目在过去几年也希望通过 JupyterLab 来加强对大型代码库的处理过程。 然而&#xff0c;Jup…

vue中实现图片裁剪

在现代Web应用中&#xff0c;图片处理是一个常见的需求。本文将介绍如何使用Vue.js结合Cropper.js实现一个简单的图片裁剪功能。以下是实现该功能的完整代码。 代码实现 <template><div class"c-copper-container" :class"{wd260 : type articlesub…

零知识证明-非对称加解密算法(三)

前言 非对称加解密算法 &#xff0c;就有对称加解密算法 1:对称算法 定义 对称算法&#xff0c;加解密双方使用一个密钥。即加密秘钥和解密秘钥相同。 对称加密又分为&#xff1a;分组加密和流加密 分组加密 分组加密是每次只能处理特定长度的一块数据的一类密码算法&#xff0…

WPF 手撸插件 五 消息总线

虽然暂时不知道该如何将消息总线集成到插件系统中&#xff0c;但是让我先学习起来吧&#xff0c;本文主要来说说我最近学习的Reface.EventBus Reface.EventBus有两个版本&#xff0c;分别支持.Net Framework和 .Net Core。 我们这里先说支持.Net Framework的版本&#xff0c;先…

【问题记录】mysql报错 ,mysql2 和 mysql 5.

错误2 和 错误5 都是由于注册表有问题&#xff1a; 由于我之前安装过MySQL&#xff0c;导致之前的配置没有删除。 解决&#xff1a; 搜索打开注册表编辑器&#xff1a; 注册表中找到MySQL: 修改路径&#xff1a; "D:\develop\mysql-8.0.39-winx64\bin\mysqld&quo…

边缘物联网平台AIoTedge推荐

AIoTedge是一个创新的智能边缘计算平台&#xff0c;它通过边云协同的架构设计&#xff0c;实现了多点部署和分布式计算&#xff0c;提高了数据处理的速度和效率&#xff0c;同时确保了数据的安全性和隐私性。平台具备强大的分布式AIoT处理能力&#xff0c;适用于多种场景&#…

【中学教资-信息技术】图像/音频/视频文件大小的计算

图像/音频/视频文件大小的计算 1 图像文件2 音频文件3 视频文件4 例题5 总结 视频讲解&#xff1a;音频文件大小/视频文件大小计算-失舵之舟 1 图像文件 压缩比原始大小/被压缩之后大小 颜色深度&#xff1a;指图像中每个像素所占的二进制位数&#xff08;bit&#xff09; n位…

linux查看系统安装时间命令,找出Linux操作系统(OS)安装日期和时间

你可能想知道你的计算机上何时安装了Linux操作系统,即OS的安装日期和时间,使用tune2fs、dumpe2fs、ls、basesystem、setup、setuptool命令能出来结果。请注意,如果你从模板安装了操作系统,那么它将显示模板生成日期,而不是实际操作系统安装日期。 方法1:如何使用tune2fs…

Solidity入门——receive()和fallback()以及交易数据的简单介绍和运用

如何运用payable和transfer发送交易 在以太坊智能合约中&#xff0c;payable关键字和.transfer()方法它们在智能合约中是如何被使用的。 payable关键字 payable关键字用于声明合约或函数可以接受以太币。当你在一个函数或合约前面加上payable修饰符时&#xff0c;你允许该函…

java程序优化

Java程序的性能优化是一个复杂但非常重要的过程&#xff0c;它涉及多个方面。首先&#xff0c;我们需要识别性能瓶颈的具体位置&#xff0c;这通常可以通过性能分析工具&#xff08;如JProfiler, VisualVM等&#xff09;来完成。以下是一些通用的优化策略&#xff1a; 代码层面…

软件测试学习笔记丨Pytest配置文件

本文转自测试人社区&#xff0c;原文链接&#xff1a;https://ceshiren.com/t/topic/31774 一、Pytest配置文件 1.1 pytest.ini的定义 pytest.ini是pytest的配置文件&#xff1b;可以修改pytest的默认行为&#xff1b;不能使用任何中文符号&#xff0c;包括汉字、空格、引号、…