使用JavaScript转换图片格式

我们可以在现代浏览器中直接转换图片和格式,不需要上传服务器或者使用服务器脚本。

HTML

<!-- 文件上传控件 -->
<input type="file" id="fileInput" accept="image/*" /><!-- 输出格式选择 -->
<select id="formatSelect"><option value="image/jpeg">JPEG</option><option value="image/png">PNG</option><option value="image/webp">WEBP</option><!-- 可以添加更多图片格式 -->
</select><!-- 转换图片按钮 -->
<button id="convertButton">转换图片</button><!-- 导出图片按钮 -->
<a id="downloadButton" style="display: none">下载转换后的图片</a><!-- 这里将展示转换后的图片 -->
<div id="result"></div>

一个 file 类型的 input 用于上传本地图片,一个下拉框用于选择导出图片类型(JPEG、PNG、WEBP),一个按钮点击进行转换,一个 a 标签导出转换后的图片,最后一个 div 显示转换后的图片。

SCRIPT

document.addEventListener("DOMContentLoaded", function () {const fileInput = document.getElementById("fileInput");const formatSelect = document.getElementById("formatSelect");const downloadButton = document.getElementById("downloadButton");fileInput.addEventListener("change", handleFileSelect, false);document.getElementById("convertButton").addEventListener("click",function () {const files = fileInput.files;if (files.length === 0) {alert("Please select a file.");return;}const file = files[0];const reader = new FileReader();reader.onload = function (event) {const img = new Image();img.onload = function () {const dataUrl = convertImageFormat(img,formatSelect.value,0.92); // 92% quality for JPEG/WebPdisplayImage(dataUrl);// 显示下载按钮downloadButton.style.display = "block";// 将转换后的图片的URL设置为下载链接downloadButton.href = dataUrl;console.log(dataUrl);// 设置下载的文件名downloadButton.download ="converted_image." + formatSelect.value.split("/")[1];};img.src = event.target.result;};reader.readAsDataURL(file);},false);function displayImage(dataUrl) {const resultDiv = document.getElementById("result");resultDiv.innerHTML = "";const img = document.createElement("img");img.src = dataUrl;resultDiv.appendChild(img);}// 图片格式转换函数function convertImageFormat(image, outputFormat, quality) {const canvas = document.createElement("canvas");canvas.width = image.width;canvas.height = image.height;const ctx = canvas.getContext("2d");ctx.drawImage(image, 0, 0, image.width, image.height);return canvas.toDataURL(outputFormat, quality);}// 文件选择处理function handleFileSelect(event) {const file = event.target.files[0];if (!file.type.match("image.*")) {alert("Please select an image file.");return;}// 隐藏下载按钮直到图片被转换downloadButton.style.display = "none";}
});

当文档加载完毕后 (DOMContentLoaded 事件被触发时),代码中定义的函数开始执行。

用户通过一个输入控件选择一个图像文件,并可以选择一个目标格式。

点击一个按钮后,选中的文件读取并转换为所选的图像格式。

图片转换是通过创建一个临时的 canvas 元素,将上传的图片绘制在该元素上,并以指定的格式和质量转换为 DataURL 实现的。

转换后的图片会显示在页面上,并提供一个链接供用户下载。

下载按钮最初是隐藏的,转换完成后会显示出来,并且会将 DataURL 设置为下载链接的href属性,并为转换后的文件指定一个默认的下载名称。

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

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

相关文章

sns 查看pandas 数据对比

一 对比其中两列数据的方式 import seaborn as snssns.kdeplot(data[charge], shade True, hue data[sex]) sns.kdeplot 是 Seaborn 库中用于绘制核密度估计图&#xff08;Kernel Density Estimate&#xff0c;简称 KDE 图&#xff09;的函数。核密度估计是一种非参数统计方…

redis基本用法学习(主要数据类型)

redis官网教程中介绍有三种方式连接redis&#xff1a;命令行、gui工具和编程连接&#xff1a;   命令行方式主要是在命令行中输入redis-cli后&#xff0c;通过命令方式与redis服务进行交互&#xff0c;支持两种模式&#xff1a;REPL模式&#xff08;简单的交互式的编程环境&a…

深度学习 Day16——P5运动鞋识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 文章目录 前言1 我的环境2 代码实现与执行结果2.1 前期准备2.1.1 引入库2.1.2 设置GPU&#xff08;如果设备上支持GPU就使用GPU,否则使用C…

【C++配置yaml】yaml-cpp使用

yaml-cpp 》》参考资料1 》》参考资料2 文章目录 yaml-cpp下载安装yaml-cpp使用Nodenode的增改查删Node 相关APIyaml文件解析 下载安装 安装yaml-cpp git clone https://github.com/jbeder/yaml-cpp.git cd yaml-cpp mkdir build && cd build cmake .. && m…

【Qt QML 入门】TextArea

TextArea也是一个多行文本编辑器。TextArea相比texttedit&#xff0c;增加了占位符文本&#xff0c;并添加了样式定义。 import QtQuick import QtQuick.Window import QtQuick.ControlsWindow {id: winwidth: 800height: 600visible: trueTextArea {id: taanchors.centerIn: …

解决Visual Studio 各版本都出现新建项目后解决方案下没有文件和项目问题

一步一步创建C#控制台应用程序也会出错&#xff0c;这个你可能不会相信&#xff0c;我就遇到了这么一次&#xff0c;就在刚刚&#xff0c;是的&#xff0c;我都不敢相信&#xff0c;用了这么多年的新建一个控制台程序居然不正常了。新建完毕发现里面什么都没有&#xff0c;除了…

飞天使-docker知识点10-docker总结

文章目录 docker 知识点汇总docker chatgpt解释学习路线 docker 知识点汇总 docker 基础用法 docker 镜像基础用法 docker 容器网络 docker 存储卷 dockerfile docker仓库 harbor docker-compose docker chatgpt解释学习路线 学习Docker可以帮助你了解容器化技术&#xff0c…

首发卡密引流系统源码

程序特色&#xff1a; 支持个人和企业小程序广告获取卡密。 支持短视频点赞和关注获取卡密。 搭建教程&#xff1a; 环境要求&#xff1a;Nginx、MySQL 5.6、PHP 5.6 步骤&#xff1a; 将压缩包解压至网站根目录。 打开域名/install&#xff0c;按照提示填写数据库信息进行…

JS对象循环引用的危害:你知道吗?

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

移动端机器学习框架 MDL 简介与实践

Mobile-deep-learning&#xff08;MDL&#xff09; MDL 是百度研发的可以部署在移动端的基于卷积神经网络实现的移动端框架&#xff0c;可以应用在图像识别领域。 具体应用&#xff1a;在手机百度 App 中&#xff0c;用户只需要点击自动拍开关&#xff0c;将手机对准物体&…

联想王传东:AI PC迈入AI Ready 即将开启AI On

“AI PC已经正式迈入AI Ready 阶段&#xff0c;接下来会逐渐进入到AI On阶段。”12月16日&#xff0c;英特尔人工智能创新应用大赛启动仪式在深圳举办。作为独家AI PC合作伙伴&#xff0c;联想集团副总裁、中国区首席市场官王传东代表公司出席仪式并致辞。 王传东认为AI PC的发…

MySQL查询,条件查询、模糊查询、限制查询...

## 检索限制 SELECT DISTINCT event_id FROM sign_guest; # distinct作用于它后面写的所有列 SELECT * FROM sign_guest LIMIT 5; # 返回数据不多余5条 SELECT * FROM sign_guest LIMIT 2,4; # 第一个数是开始的位置&#xff0c;第二个数是要返回的数据条数#### 排序检索## o…

《哥德尔证明》阅读笔记——一致性问题

前言 从第一次了解到哥德尔不确定性原理时&#xff0c;我就被此定理的内涵和意义所吸引&#xff0c;也对这个定理的证明过程充满兴趣&#xff0c;最近闲暇时&#xff0c;买了这本《哥德尔证明》的书&#xff0c;希望理解这个意义重大的数学定理的核心&#xff0c;在此做一个阅…

大模型Transformer 推理 :kvCache原理浅析

大模型Transformer 推理 :kvCache原理浅析 kvCache 原理 在采样时,Transformer模型会以给定的提示/上下文作为初始输入进行推理(可以并行处理),然后逐一生成额外的标记来继续完善生成的序列(体现了模型的自回归性质)。在采样过程中,Transformer会执行自注意力操作,为…

27系列DGUS智能屏发布:可实时播放高清模拟信号摄像头视频

针对高清晰度的模拟信号摄像头视频画面的显示需求&#xff0c;迪文特推出27系列DGUS智能屏。该系列智能屏可适配常见的AHD摄像头、CVBS摄像头&#xff0c;支持单路1080P高清显示、两路720P同屏显示&#xff08;同一类型摄像头&#xff09;。用户通过DGUS简单开发即可实现摄像头…

【送书活动】智能汽车、自动驾驶、车联网的发展趋势和关键技术

文章目录 前言01 《智能汽车》推荐语 02 《SoC底层软件低功耗系统设计与实现》推荐语 03 《SoC设计指南》推荐语 05 《智能汽车网络安全权威指南&#xff08;上册&#xff09;》推荐语 06 《智能汽车网络安全权威指南&#xff08;下册&#xff09;》推荐语 后记赠书活动 前言 …

mac安装pnpm与使用

1、什么是pnpm&#xff1f; pnpm 全称 performant npm&#xff0c;意思是高性能的 npm。pnpm 由 npm/yarn 衍生而来&#xff0c;解决了 npm/yarn 内部潜在的 bug&#xff0c;极大的优化了性能&#xff0c;扩展了使用场景。被誉为 “最先进的包管理工具”。 2、pnpm特点 速度…

虚拟机启动 I/O error in “xfs_read_agi+0x95“

1.在选择系统界面按e 进入维护模式 2.找到ro把ro改成 rw init/sysroot/bin/sh 然后按Ctrlx 3.找到坏掉的分区&#xff0c;以nvme0n1p3为例进行修复 xfs_repair -d /dev/nvme0n1p3 4.init 6 重新启动 以下情况 先umount 再修复 则修复成功

接口测试 — 4.Requests库GET、Post请求

Requests库GET请求是使用HTTP协议中的GET请求方式对目标网站发起请求。 &#xff08;不带参数的GET请求请看上一篇文章的练习&#xff09; 1、Requests库待参数的GET请求 使用Get方法带参数请求时&#xff0c;是params参数字典&#xff0c;而不是data参数字典。data参数字典…

dcoker-compose一键部署EFAK —— 筑梦之路

简介 EFAK&#xff08;Eagle For Apache Kafka&#xff0c;以前称为 Kafka Eagle&#xff09;是一款由国内公司开源的Kafka集群监控系统&#xff0c;可以用来监视kafka集群的broker状态、Topic信息、IO、内存、consumer线程、偏移量等信息&#xff0c;并进行可视化图表展示。独…