如何使用HTML和JavaScript读取文件夹中的所有图片并显示RGB范围
如何使用HTML和JavaScript读取文件夹中的所有图片并显示RGB范围
在这篇博客中,我将介绍如何使用HTML和JavaScript读取文件夹中的所有图片,并显示这些图片以及它们的RGB范围。这个项目使用现代浏览器提供的<input type="file" webkitdirectory>特性以及Canvas元素来实现。

选择后

项目概述
我们将创建一个网页应用,允许用户选择一个包含图片的文件夹。然后,应用会读取该文件夹中的所有图片,显示每张图片,并计算和显示每张图片的RGB范围(最小值和最大值)。
步骤1:创建HTML结构
首先,我们需要创建HTML文件,包括一个文件输入元素和一个用于显示图片及其RGB信息的容器。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Image RGB Range</title><style>.image-container {display: flex;flex-wrap: wrap;}.image-box {margin: 10px;}img {max-width: 300px;height: auto;}.rgb-info {margin-top: 5px;}</style>
</head>
<body><h1>Image RGB Range</h1><input type="file" id="fileInput" webkitdirectory multiple><div class="image-container" id="imageContainer"></div><script src="script.js"></script>
</body>
</html>
在这里,我们定义了一个文件输入元素<input type="file" id="fileInput" webkitdirectory multiple>,允许用户选择一个文件夹,并在文件夹中选择多个文件。webkitdirectory属性使文件输入元素可以选择文件夹。我们还定义了一个容器<div class="image-container" id="imageContainer"></div>,用于显示图片及其RGB信息。
步骤2:编写JavaScript代码
接下来,我们编写JavaScript代码来处理文件输入、读取图片文件、显示图片,并计算和显示RGB范围。
document.getElementById('fileInput').addEventListener('change', handleFiles);function handleFiles(event) {const files = event.target.files;const imageContainer = document.getElementById('imageContainer');imageContainer.innerHTML = '';for (const file of files) {if (file.type.startsWith('image/')) {const reader = new FileReader();reader.onload = function(e) {const img = new Image();img.src = e.target.result;img.onload = function() {displayImageAndRgbRange(img, file.name);};};reader.readAsDataURL(file);}}
}function displayImageAndRgbRange(img, fileName) {const canvas = document.createElement('canvas');const ctx = canvas.getContext('2d');canvas.width = img.width;canvas.height = img.height;ctx.drawImage(img, 0, 0, img.width, img.height);const imageData = ctx.getImageData(0, 0, img.width, img.height).data;const rgbRange = getRgbRange(imageData);const imageBox = document.createElement('div');imageBox.className = 'image-box';const imgElement = document.createElement('img');imgElement.src = img.src;const rgbInfo = document.createElement('div');rgbInfo.className = 'rgb-info';rgbInfo.innerText = `Image: ${fileName}\nMin RGB: ${rgbRange.min}\nMax RGB: ${rgbRange.max}`;imageBox.appendChild(imgElement);imageBox.appendChild(rgbInfo);document.getElementById('imageContainer').appendChild(imageBox);
}function getRgbRange(data) {let minRgb = [255, 255, 255];let maxRgb = [0, 0, 0];for (let i = 0; i < data.length; i += 4) {const r = data[i];const g = data[i + 1];const b = data[i + 2];if (r < minRgb[0]) minRgb[0] = r;if (g < minRgb[1]) minRgb[1] = g;if (b < minRgb[2]) minRgb[2] = b;if (r > maxRgb[0]) maxRgb[0] = r;if (g > maxRgb[1]) maxRgb[1] = g;if (b > maxRgb[2]) maxRgb[2] = b;}return { min: minRgb, max: maxRgb };
}
代码解释
-
处理文件输入变化事件:
- 当用户选择文件夹中的文件时,触发
handleFiles函数。 - 遍历选择的文件,过滤出图片文件(文件类型以
image/开头)。 - 使用
FileReader读取图片文件数据,并在加载图片后调用displayImageAndRgbRange函数。
- 当用户选择文件夹中的文件时,触发
-
显示图片及其RGB范围:
- 创建Canvas元素,并在Canvas上绘制图片。
- 获取图片的像素数据,计算每张图片的RGB范围(最小值和最大值)。
- 创建并显示图片及其RGB范围信息。
-
计算RGB范围:
- 遍历图片的像素数据,找到每个通道(R、G、B)的最小值和最大值。
结论
通过以上步骤,我们成功创建了一个网页应用,允许用户选择一个包含图片的文件夹,读取其中所有图片,并显示每张图片及其RGB范围。这个项目展示了如何使用HTML5文件API、FileReader、Canvas元素和JavaScript处理和显示图片数据。希望这个示例对你有所帮助,并能激发你在前端开发中的更多创意和探索。
最后
完整代码可以参考下面的文件结构:
- index.html
- script.js
确保将HTML代码保存为index.html文件,将JavaScript代码保存为script.js文件,并确保它们在同一目录下。然后用浏览器打开index.html文件即可测试。
如果你有任何问题或建议,请在评论区留言。祝你编码愉快!
相关文章:
如何使用HTML和JavaScript读取文件夹中的所有图片并显示RGB范围
如何使用HTML和JavaScript读取文件夹中的所有图片并显示RGB范围 在这篇博客中,我将介绍如何使用HTML和JavaScript读取文件夹中的所有图片,并显示这些图片以及它们的RGB范围。这个项目使用现代浏览器提供的<input type"file" webkitdirecto…...
PDF公式转Latex
文章目录 摘要数据集 UniMER介绍下载链接 LaTeX-OCRUniMERNet安装UniMER 用的数据集介绍下载链接 PDF-Extract-Kit整体介绍效果展示评测指标布局检测公式检测公式识别 使用教程环境安装参考[模型下载](models/README.md)下载所需模型权重 在Windows上运行在macOS上运行运行提取…...
excel 百分位函数 学习
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、函数说明PERCENTILE 函数PERCENTILE.inc 函数PERCENTILE.exc 函数QUARTILE.EXC 函数 二、使用步骤总结 前言 excel 百分位函数 Excel提供了几个函数用于…...
(十一) Docker compose 部署 Mysql 和 其它容器
文章目录 1、前言1.1、部署 MySQL 容器的 3 种类型1.2、M2芯片类型问题 2、具体实现2.1、单独部署 mysql 供宿主机访问2.1.1、文件夹结构2.1.2、docker-compose.yml 内容2.1.3、运行 2.2、单独部署 mysql 容器供其它容器访问(以 apollo 为例)2.2.1、文件…...
提高项目透明度:有效的跟踪软件
国内外主流的10款项目进度跟踪软件对比:PingCode、Worktile、Teambition、Tower、Asana、Trello、Jira、ClickUp、Notion、Liquid Planner。 在项目管理中,确保进度跟踪的准确性与效率是每位项目经理面临的主要挑战之一。选用合适的项目进度跟踪软件不仅…...
大模型生成人物关系思维导图的实战教程
大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…...
精通 mysqldumpslow:深度分析 MySQL 慢查询日志
引言 在数据库管理与优化的领域中,慢查询日志是识别性能瓶颈的金矿。mysqldumpslow 工具是挖掘这座金矿的利器,它帮助我们分析 MySQL 慢查询日志并提取关键信息。本文将详细介绍 mysqldumpslow 的核心选项,并通过实例展示如何使用这些选项来…...
C# Winform之propertyGrid控件分组后排序功能
在 WinForms 的 PropertyGrid 控件中,你可以通过多种方式对属性进行排序,包括按类别(Category)排序以及按属性名称排序。默认情况下,PropertyGrid 控件会根据 [Category] 和 [DisplayName] 属性装饰器对属性进行分组和…...
Java基础(十九):集合框架
目录 一、Java集合框架体系二、Collection接口及方法1、添加2、判断3、删除4、其它 三、Iterator(迭代器)接口1、Iterator接口2、迭代器的执行原理3、foreach循环 四、Collection子接口1:List1、List接口特点2、List接口方法3、List接口主要实现类:Array…...
execute_script与JS
JavaScript简称JS,有的测试场景需要JS脚本辅助完成Selenium无法做到的测试工作。webdriver提供了execute_script()方法调用JS代码。execute_script()可以在当前窗口/框架中执行JS脚本,并返回结果。可以使用它操作DOM元素、获取元素属性、执行异步操作等。…...
访问 Postman OAuth 2.0 授权的最佳实践
OAuth 2.0 代表了 web 安全协议的发展,便于在多个平台上进行授权服务,同时避免暴露用户凭据。它提供了一种安全的方式,让用户可以授权应用程序访问服务。 在 Postman 中开始使用 OAuth 2.0 Postman 是一个流行的API客户端,支持 …...
《BASeg: Boundary aware semantic segmentation for autonomous driving》论文解读
期刊:Neural Networks | Journal | ScienceDirect.com by Elsevier 年份:2023 代码:https://github.com/Lature-Yang/BASeg 摘要 语义分割是自动驾驶领域街道理解任务的重要组成部分。现有的各种方法要么专注于通过聚合全局或多尺度上下文…...
高效利用iCloud指南
高效利用iCloud的指南主要包括以下几个方面: 一、注册与登录 创建Apple ID: 如果尚未拥有Apple ID,可以在苹果官网或iOS设备的设置中创建。Apple ID是访问iCloud服务的前提。登录iCloud: 在苹果设备上,进入“设置”应…...
【MySQL】常见的MySQL日志都有什么用?
MySQL日志的内容非常重要,面试中经常会被问到。同时,掌握日志相关的知识也有利于我们理解MySQL 底层原理,必要时帮助我们排查解决问题。 MySQL中常见的日志类型主要有下面几类(针对的是InnoDB 存储引擎): 错误日志(error log):对 MySQL 的启…...
IDEA社区版使用Maven archetype 创建Spring boot 项目
1.新建new project 2.选择Maven Archetype 3.命名name 4.选择存储地址 5.选择jdk版本 6.Archetype使用webapp 7.create创建项目 创建好长这样。 检查一下自己的Maven是否是自己的。 没问题的话就开始增添java包。 [有的人连resources包也没有,那就需要自己添…...
C/C++ list模拟
模拟准备 避免和库冲突,自己定义一个命名空间 namespace yx {template<class T>struct ListNode{ListNode<T>* _next;ListNode<T>* _prev;T _data;};template<class T>class list{typedef ListNode<T> Node;public:private:Node* _…...
android studio开发
Kotlin 编程简介 | Android Basics Compose - First Android app | Android Developers (google.cn) 这是官网的教程,实现试一下。 之后进入课程 您的第一个 Kotlin 程序 (google.cn) 程序可以被视为一系列指示计算机或设备执行某项操作的指令,...
PostgreSQl 物化视图
物化视图(Materialized View)是 PostgreSQL 提供的一个扩展功能,它是介于视图和表之间的一种对象。 物化视图和视图的最大区别是它不仅存储定义中的查询语句,而且可以像表一样存储数据。物化视图和表的最大区别是它不支持 INSERT…...
Win10工具:批量word转png图片
首先声明这个小工具是小编本人开发的,无任何广告,会员收费机制等,永久使用。允许公司或个人使用,不允许倒卖,否则发现后会追究法律责任,毕竟开发不易。工具是用python开发的。 功能非常单一,就…...
期货量化交易客户端开源教学第八节——TCP通信服务类
private FReciveStr: AnsiString; {接收到的数据} IsConErr: Boolean; {网络连接是否失败} FSocket_LB: Integer; {TCP连接类别,0为交易,1为行情,2为查询} FRetryCount: Integer; {网络连接重试次数} FLoginErrEvent: TLoginErrEvent; {…...
从NetworkManager冲突到配置文件错误:一步步教你排查Linux网络服务故障
从NetworkManager冲突到配置文件错误:一步步教你排查Linux网络服务故障 当你深夜加班部署服务器时,突然发现网络服务无法启动,屏幕上跳出那行熟悉的Job for network.service failed错误提示,是不是瞬间血压飙升?作为L…...
Phi-3-mini-4k-instruct-gguf GPU算力优化:q4 GGUF模型在消费级显卡上的表现
Phi-3-mini-4k-instruct-gguf GPU算力优化:q4 GGUF模型在消费级显卡上的表现 1. 模型概述 Phi-3-mini-4k-instruct-gguf 是微软Phi-3系列中的轻量级文本生成模型GGUF版本,专为问答、文本改写、摘要整理和简短创作等场景优化。这个经过量化的q4 GGUF模型…...
YOLO进化史:除了网络结构,那些改变游戏规则的‘小技巧’(Mish、CIoU、Mosaic)
YOLO进化史:那些改变游戏规则的"微创新"与底层设计哲学 在目标检测领域,YOLO系列算法以其独特的单阶段检测框架和实时性能,持续引领着技术发展方向。当我们聚焦于YOLO的演进历程,会发现真正推动性能突破的往往不是网络结…...
Linux使用详解(进阶篇)
文章目录Linux使用详解(进阶篇)1.Linux目录说明2.操作防火墙3.ulimit命令和history命令4.RPM和Yum的使用5.设置系统字符集6.vi & vim编辑器7.文件同步、复制8.利用SCP命令进行文件传输Linux使用详解(进阶篇) 1.Linux目录说明 bin -> usr/bin 这个目录存放的是ÿ…...
Laravel Telescope门禁监控终极指南:10个技巧安全追踪用户权限和授权逻辑
Laravel Telescope门禁监控终极指南:10个技巧安全追踪用户权限和授权逻辑 【免费下载链接】telescope An elegant debug assistant for the Laravel framework. 项目地址: https://gitcode.com/gh_mirrors/te/telescope Laravel Telescope 是 Laravel 框架的…...
IDEA Services窗口:一站式掌控多服务启动与端口监控
1. 为什么你需要Services窗口 作为一个常年和微服务打交道的开发者,我最头疼的就是同时管理五六个服务模块。每次启动项目都要开一堆终端窗口,查看日志得像玩连连看一样在不同窗口间切换。更崩溃的是,当某个服务启动失败时,往往要…...
【低空经济合集】2300余份低空经济+低空经济园区+低空经济数字平台+低空经济赋能方案+无人机应用方案报告及政策标准(PPT+WORD+PDF)
“十五五”期间,低空经济将构建以产业园为载体、数字化平台为底座、一网统飞为机制的发展新格局。通过建设共享基础设施与智能调度体系,推动无人机在物流、巡检等场景的“一机多用”,破解低空资源分散难题,实现空域的高效集约利用…...
C++的std--ranges适配器视图迭代器有效性保证与悬垂引用检测
C20引入的std::ranges库彻底改变了序列操作的范式,其中适配器视图(如filter、transform)通过惰性求值实现了高效的管道式编程。这种延迟执行特性也带来了迭代器有效性风险——视图可能持有悬垂引用或失效迭代器,导致未定义行为。本…...
Google Cloud Python客户端库版本管理终极指南:如何选择和使用不同版本
Google Cloud Python客户端库版本管理终极指南:如何选择和使用不同版本 【免费下载链接】google-cloud-python Google Cloud Client Libraries for Python 项目地址: https://gitcode.com/gh_mirrors/go/google-cloud-python Google Cloud Python客户端库为开…...
C++模板元编程在编译期计算与类型安全泛型设计中的应用实践
C模板元编程在编译期计算与类型安全泛型设计中的应用实践 C模板元编程(TMP)作为现代C的核心技术之一,通过将计算从运行时转移到编译期,显著提升了程序性能和类型安全性。尤其在泛型设计中,TMP能够实现复杂的类型推导与…...
