【HTML图片压缩网页制作】

HTML图片压缩网页制作

  • 效果图
  • 源码
  • 下期更新预报

效果图

在这里插入图片描述
在这里插入图片描述

源码

index.html

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>图片压缩</title>
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
<style>*{border: 0;margin: 0;padding: 0;-webkit-box-sizing: border-box;-moz-box-sizing: border-box;box-sizing: border-box;box-shadow: 0px 0px 13px 4px rgba(0,0,0,0.1);}#file{display: none;}.imgs{width: 100vw;height: 100vh;background-color: #000000;text-align: center;padding-top: 200px;}::-webkit-scrollbar{width: 1px;background-color: #000000;}.up{width: 300px;height: 200px;background-color: #000000;margin: 0 auto;border-radius: 10px;}#upc{width: 150px;margin-top: 20px;}.imgwh,#Compress,#imgtype{width: 60px;height: 30px;text-align: center;margin-top: 20px;border-radius: 5px;background-color: d#ff0000;outline: none;color: #0055ff;margin-left: 5px;margin-right: 5px;border: 0;}
</style>
</head>
<body><div class="imgs"><input type="file" id="file" multiple="multiple" /><div class="up"><img id="upc" src="data:image/png;base64,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" /></div><input id="imgk" class="imgwh" type="number" title="宽(width)" value="1024" /><input id="imgg" class="imgwh" type="number" title="高(height)" value="" /><select title="压缩率(Compress)" id="Compress"><option value="0.9">9</option><option value="0.8">8</option><option value="0.7" selected>7</option><option value="0.6">6</option><option value="0.5">5</option><option value="0.4">4</option><option value="0.3">3</option><option value="0.2">2</option><option value="0.1">1</option></select><select title="导出类型(Type)" id="imgtype"><option value="" selected></option><option value="jpeg">JPEG</option><option value="webp">WEBP</option><!-- <option value="vnd.microsoft.icon">ICO</option> --><option value="png">PNG</option></select></div><script>const ACCEPT = ['image/jpg', 'image/png', 'image/jpeg','image/webp']const upload = document.getElementById("file");const MAXSIZE = 1024 * 1024 * 100;const MAXTIP = "100MB";var Sel=document.getElementById("Compress");var Sel2=document.getElementById("imgtype");upload.addEventListener('change', function (e) {// 获取上传的文件 解构Arry 拿到第一个元素const file = e.target.files;if (!file.length) {return;}for(var i=0; i<file.length; i++){// 上传校验逻辑if (!ACCEPT.includes(file[i].type)) {console.log(`不支持[${file[i].type}]类型`);upload.value = ""return}if (file[i].size > MAXSIZE) {console.log(`文件超${MAXTIP}`)upload.value = ""return}console.log(file[i].name,file[i].size,file[i].type)// 压缩图片 需要转成base64进行压缩convertImageToBase64(file[i],file[i].name, (base64Image,name) => {compress(base64Image,name, uploadToServer)});}document.getElementById("file").value="";});function convertImageToBase64(file,name, callback) {// 创建一个FileReader对象,它允许Web应用程序异步读取存储在计算机上的文件// 也就是file对象let reader = new FileReader()// 添加一个load事件,load会在加载完毕之后进行触发(也就是readAsDataURL读取完毕后触发)reader.addEventListener("load", function (e) {const base64Image = e.target.result // 相当于reader.result 获取文件的Base64// 回收内存callback && callback(base64Image,name) // 调用callback压缩reader = null})// readAsDataURL方法读取指定的file或blob对象reader.readAsDataURL(file)}// 压缩算法函数/* 1.首先拿到了base64的图片字符串 2.创建一个image对象,获得原始图片的宽度和高度3.对原始图片的宽度和高度进行压缩达到符合条件(第一次压缩-从尺寸压缩)4.调用canvasAPI进行绘制新的图片5.绘制成功之后调用canvasAPI进行绘制(canvasAPI支持压缩-二次压缩-从质量压缩)6.得到压缩后的base64*/function compress(base64Image,name, callback) {var index=Sel.selectedIndex;var index2=Sel2.selectedIndex;var ysl=Number(Sel.options[index].value) ? Number(Sel.options[index].value) : 0.7;var typeimg=Sel2.options[index2].value ? Sel2.options[index2].value : false;let maxW = document.getElementById("imgk").value ? document.getElementById("imgk").value : false;let maxH = document.getElementById("imgg").value ? document.getElementById("imgg").value : false;const image = new Image(); // 创建image对象 相当于创建a标签image.addEventListener('load', function (e) {// image加载完成后就会触发 也就是src加载后let radio; // 压缩比例let needCompress = false; // 是否需要压缩//宽高比例压缩if (maxW && !maxH && image.naturalWidth > maxW) {needCompress = true;// 获得压缩宽高过后的大小(保证等比例缩放)radio = image.naturalWidth / maxW;maxH = image.naturalHeight / radio;}if (!maxW && maxH && image.naturalHeight > maxH) {needCompress = true;// 获得压缩宽高过后的大小(保证等比例缩放)radio = image.naturalHeight / maxH;maxW = image.naturalWidth / radio;}if (maxW && maxH) {needCompress = true;}// 不需要压缩if (!needCompress) {maxW = image.naturalWidth;maxH = image.naturalHeight;}// 第一次压缩完成// 接下来使用canvas进行质量压缩const canvas = document.createElement('canvas');canvas.height = maxH;canvas.width = maxW;canvas.setAttribute("id", "_compress_")// visibility hidden 需要创建的canvas隐藏 而不是不渲染DOMcanvas.style.visibility = 'hidden'document.body.appendChild(canvas);const ctx = canvas.getContext('2d');// canvas.clearRect() 方法清空给定矩形内的指定像素。(x1,y1,width,height)ctx.clearRect(0, 0, maxW, maxH);// canvas.drawImage() 方法在画布(canvas)上绘制图像、画布或视频。// 传入 视频/图片对象 起始点x 起始点y 绘制宽 绘制高 ctx.drawImage(image, 0, 0, maxW, maxH);//接来下就是压缩canvas 通过API将canvas输出成base64格式if(!typeimg){if(name.endsWith('.png')){var compressImage = canvas.toDataURL('image/png', ysl);}else if(name.endsWith('.jpeg') || name.endsWith('.jpg')){var compressImage = canvas.toDataURL('image/jpeg', ysl);}else if(name.endsWith('.webp')){var compressImage = canvas.toDataURL('image/webp', ysl);}else{var compressImage = canvas.toDataURL('image/jpeg', ysl);}}else{var typeimgs='image/'+typeimg;var compressImage = canvas.toDataURL(typeimgs, ysl);name=name.replace(/.[^/.]+$/,'.'+typeimg);}//  const compressImage = canvas.toDataURL('image/png', 0.8);callback && callback(compressImage); // 压缩完成进行后台传输逻辑// 压缩完的图片就已经保存在内存(compressImage)中了 // 接下来移除canvas元素 调用DOM.remove()canvas.remove();console.log(compressImage);imgdown(compressImage,name);// 需要的上传预览的话可以单独建一个new image进行预览// const _image = new Image();// _image.src = compressImage;// document.body.appendChild(_image);//计算压缩比 使用src(base)的长度就可以对比了 // console.log(`压缩比:${image.src.length/compressImage.length}`);})image.src = base64Image;// document.body.appendChild(image) // 显示压缩前的图片}// 绑定上传图片的change事件// mock上传后台逻辑function uploadToServer(compressImage) {// console.log("null");}//下载图片function imgdown(base64Str,name){let aLink = document.createElement("a");aLink.style.display = "none";aLink.href = base64Str;aLink.download = name;// 触发点击-然后移除document.body.appendChild(aLink);aLink.click();document.body.removeChild(aLink);}document.getElementById("upc").addEventListener("click",function(){document.getElementById("file").click();})</script>
<div onclick="location.href='https://wwww'" style="position: fixed;right: 20px;top: 20px;padding: 10px;"><img style=" width: 25px;vertical-align:middle;" src="data:image/svg+xml,%3Csvg%20width%3D%2228%22%20height%3D%2228%22%20viewBox%3D%220%200%2028%2028%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Ccircle%20cx%3D%2214%22%20cy%3D%2214%22%20r%3D%2213.346%22%20fill%3D%22%23F5F5F5%22%20stroke%3D%22%23DDD%22%20stroke-width%3D%221.308%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M14%205.6c-4.64%200-8.4%203.855-8.4%208.614%200%203.808%202.408%207.033%205.744%208.176.418.079.573-.186.573-.418%200-.207-.005-.746-.01-1.465-2.336.518-2.832-1.153-2.832-1.153-.381-.994-.933-1.264-.933-1.264-.763-.534.057-.523.057-.523.84.063%201.289.888%201.289.888.748%201.317%201.965.936%202.444.714.078-.555.294-.936.531-1.153-1.861-.211-3.82-.951-3.82-4.251%200-.942.324-1.708.866-2.311-.088-.222-.377-1.095.077-2.28%200%200%20.706-.232%202.31.884A7.962%207.962%200%200%201%2014%209.767a7.99%207.99%200%200%201%202.104.29c1.604-1.115%202.31-.882%202.31-.882.459%201.184.17%202.062.082%202.279.537.603.862%201.37.862%202.31%200%203.311-1.965%204.035-3.837%204.252.3.265.572.794.572%201.597%200%201.153-.01%202.079-.01%202.364%200%20.233.15.497.578.413%203.336-1.143%205.739-4.368%205.739-8.17%200-4.765-3.76-8.62-8.4-8.62Z%22%20fill%3D%22%23191717%22%2F%3E%3C%2Fsvg%3E" /><span style="vertical-align:middle;font-size: 14px;color: #fff;">GitHub</span>
</div>
</body>
</html>

下期更新预报

Jquery简易好看私人图床源码

  • 📢博客主页:孤客网络科技工作室官方账号
  • 📢欢迎点赞👍收藏⭐️留言 📝如有错误敬请指正!
  • 📢本文由孤客原创,若侵权联系作者,首发于CSDN博客
  • 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更好的生活💻

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

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

相关文章

虚拟机VMware下ROS Neotic(Ubuntu 20.04)下安装OpenCV

一、ROS安装 ROS的官方安装步骤&#xff1a; 1、noetic / Ubuntu 20.04 &#xff1a; http://wiki.ros.org/noetic/Installation/Ubuntu 2、melodic / Ubuntu 18.04&#xff1a; http://wiki.ros.org/melodic/Installation/Ubuntu 3、kinetic / Ubuntu 16.04&#xff1a; http:…

Flutter基础语法

Flutter概要 Flutter目录结构 文件夹 作用 android android 平台相关代码 ios ios平台相关代码 lib flutter相关代码&#xff0c;我们主要编写的代码就在这个文件夹中 test 用于存放测试的代码 pubspec.yaml 配置文件&#xff0c;一般存放一些第三方库的依赖 Flutt…

SpringCloud系列(17)--将服务消费者Consumer注册进Zookeeper

前言&#xff1a;在上一章节中我们把服务提供者Provider注册进了Zookeeper&#xff0c;而本章节则是关于如何将服务消费者Consumer注册进Zookeeper 1、再次创建一个服务提供者模块&#xff0c;命名为consumerzk-order80 (1)在父工程下新建模块 (2)选择模块的项目类型为Maven并…

go基础(flag、json)

go基础 基础main函数数据类型类型转换switch函数计算效率go中实现工厂模式switch flag 解析命令行参数json结构体序列化map序列化struct 反序列化 基础 main函数 package main import "log" func main() {log.Println("hello world") }cd 到 main 文件夹下…

解决双击PDF文件出现打印的问题【Adobe DC】

问题描述 电脑安装Adobe Acrobat DC之后&#xff0c;双击PDF文件就会出现打印&#xff0c;而无法直接打开。 右键PDF文件就会发现&#xff0c;第一栏出现的不是用Adobe打开&#xff0c;而是打印。 重装软件多次仍然无法解决。 原因 右键菜单被改写了。双击其实是执行右键菜…

OpenHarmony硬件合成方案解析

本文档主要讲解在OpenHarmony中&#xff0c;硬件合成适配的方法及原理说明。 环境说明&#xff1a; OHOS版本&#xff1a;3.1-Release及以上 一、背景介绍 1.1 什么是合成 要理解什么是合成&#xff0c;合成做了什么&#xff1f;我们先通过分解设置界面来回答这个问题: 在…

MF(推荐系统的矩阵分解技术)论文笔记

论文概述 推荐系统的矩阵分解技术可以为用户提供更为准确的个性化推荐&#xff0c;对比传统的近邻技术&#xff0c;矩阵分解技术可以纳入更多信息&#xff0c;如隐式反馈、时间效应和置信度 近邻技术&#xff1a;基于用户或物品之间的相似性进行推荐&#xff0c;当用户之间已…

SpringBoot---------整合Redis

目录 第一步&#xff1a;引入依赖 第二步&#xff1a;配置Redis信息 第三步&#xff1a;选择Spring Data Redis进行操作Redis数据库 ①操作String类型数据&#xff08;用的少&#xff09; ②操作Object类型数据&#xff08;重要&#xff01;&#xff01;&#xff01;&#x…

CLIP论文笔记:Learning Transferable Visual Models From Natural Language Supervision

导语 会议&#xff1a;ICML 2021链接&#xff1a;https://proceedings.mlr.press/v139/radford21a/radford21a.pdf 当前的计算机视觉系统通常只能识别预先设定的对象类别&#xff0c;这限制了它们的广泛应用。为了突破这一局限&#xff0c;本文探索了一种新的学习方法&#x…

论文解读:(CAVPT)Dual Modality Prompt Tuning for Vision-Language Pre-Trained Model

v1文章名字&#xff1a;Dual Modality Prompt Tuning for Vision-Language Pre-Trained Model v2文章名字&#xff1a;Class-Aware Visual Prompt Tuning for Vision-Language Pre-Trained Model 文章汇总 对该文的改进&#xff1a;论文解读&#xff1a;(VPT)Visual Prompt …

【03-掌握Scikit-learn:深入机器学习的实用技术】

文章目录 前言数据预处理缺失值处理数据缩放 特征选择模型训练参数调整模型评估总结 前言 经过了对Python和Scikit-learn的基础安装及简单应用&#xff0c;我们现在将更深入地探究Scikit-learn的实用技术&#xff0c;以进一步提升我们的数据科学技能。在本文中&#xff0c;我们…

The Log-Structured Merge-Tree (LSM-Tree) 论文阅读笔记

原论文&#xff1a;The Log-Structured Merge-Tree (LSM-Tree) LSM-Tree的简介和关键技术要点 LSM-Tree&#xff08;Log-Structured Merge-Tree&#xff09;是一种为高吞吐量读写操作优化的数据结构&#xff0c;特别适用于写入密集型的应用场景。它由Patrick O’Neil等人开发…