用JS实现:图片压缩、图片加密

article/2025/9/14 17:06:35

本文将用JavaScript实现两个颇有技术含量的功能:图片压缩、图片加密。

最终效果:可实现将任意图片加密、压缩,并保存到一个独立的html页面中,输入正确的密码,才能看到原图。

第一步、压缩图片

技术原理

将图片读入canvas,并使用canvas的toDataURL方法将图片base64化,在此过程中,可以设定quality值,即图片质量值,值为0.1到1之间,值越小,压缩度越高。

完整代码

保存为html文件即可运行。

<html>
<body><script src="https://code.jquery.com/jquery-1.11.3.js"></script><input id="file" type="file"  capture="microphone" accept="image/*"><br>压缩后的图片:<span id="sz"></span><br><img id="pic" ><script>$("#file").change(function(){var m_this = this;cutImageBase64(m_this,null,900,0.7);})function cutImageBase64(m_this,id,wid,quality) {var file = m_this.files[0];var URL = window.URL || window.webkitURL;var blob = URL.createObjectURL(file);var base64;var img = new Image();img.src = blob;img.onload = function() {var that = this;//生成比例var w = that.width,h = that.height,scale = w / h;w = wid || w;h = w / scale;//生成canvasvar canvas = document.createElement('canvas');var ctx = canvas.getContext('2d');$(canvas).attr({width: w,height: h});ctx.drawImage(that, 0, 0, w, h);// 生成base64base64 = canvas.toDataURL('image/jpeg', quality || 0.9);document.getElementById("pic").src=base64;document.getElementById("sz").innerHTML = parseInt(base64.length/2014,0) + "kb";};}</script></body>
</html>

运行效果

压缩率

本例,运行时加载任何一张本地图片。从上图中可以看到,压缩后图片的大小是41KB,而原始的文件大小是1MB:

可见,压缩效果还是非常不错的。

第二步、加密图片

前面所述的图片压缩,是很实用的技术,接下来,展示另一个奇淫技巧:图片加密。

之所以即讲压缩压缩,又谈图片加密,是因为图片加密是于前面压缩技术的基础上完成的。

上面的代码中,toDataURL产生的是图片的base64编码。

Base64编码必须是完整且正确才能正常显示图片。

而只需对此编码做小小修改,哪怕仅是改动一个字符,也会让图片无法正常显示。

那么,程序中给编码某个位置增加一个字符,以达到破坏正确编码进而实现加密的效果:

运行效果,输出加密后的base64编码:

测试一下,这段动过手脚的base64编码以图片方式加载,看是否能显示图片。

效果如下,图片无法正常显示。

那么,接下来将实现这样的效果:

在网页中,用img的src引入加密的base64字符,此时图片是不能显示的。然后,可以输入密码,当密码正确时,解密base64字符,让图片正常显示。

运行效果

输入密码阶段:

密码正确,解密并显示图片:

解密并显示图片的源码:

注:base64编码很长,因此在下面的源码中没有展示,实测时,之前的代码会输出base64编码,复制过来使用即可。

<html><script>function jm(){var pass = prompt('请输入口令','');if (pass != "1"+"2"+"3"){alert("口令错误。");}else{var base64_2 = document.getElementById("encode_base64").src.toString();//解密var base64_3 = base64_2.substring(0,26) + base64_2.substring(27,base64_2.length);document.getElementById("pic").src=base64_3;console.log(base64_3)}}</script><img id="pic"><a onclick="jm()">点此解密并显示图片</a><img id= "encode_base64" src="此处填入之前加密生成的base64编码">
</html>

可能有人已经发现:虽然图片编码经过了加密,而且增加了口令保护,但是只要查看网页源码,就可以知道口令,这样完全没有起到加密的效果。

到目前为止,确实存在这个问题。所以,还要更进一步:

真正的加密

口令可以被看到,是因为javascript代码透明,那么,就要对解密的js代码加密了,加密后,口令将不可见!

JShaman对JS代码进行混淆加密:

并在JShaman的配置中勾选择“字符串加密”:

加密后的代码将完全找不到之前的口令字符:

在网页中查看,加密的JS代码,其中搜索不到口令“123”:

这样就实现了完整的图片加密:将图片加密存放到了单独的html中,可以方便的携带、存储、传递。

而内容是加密的、口令也是加密的。只有知道口令的人,才能看到图片,安全又私密。


http://chatgpt.dhexx.cn/article/Ujd0vN6J.shtml

相关文章

python图片水印加密的几种处理方式

常见的图片加密方法包括加密算法、水印、隐藏、压缩等。下面简要介绍一些常见的图片加密方法&#xff1a; 加密算法 加密算法是一种基于数学运算的加密方式&#xff0c;可对图片进行加密处理&#xff0c;使得未经过解密操作的情况下难以被直接读取或显示。常见的加密算法包括对…

去除水印-Teorex Inpaint 序列号

Teorex Inpaint 正版序列号 效果很好&#xff01; 如图所示 序列号在下面&#xff1b; 上面就是 正版的效果&#xff1b; 所以 大家好评 我心领了 记得关注&#xff01; 好福利一堆呢&#xff01; 回复“水印” 知识星球也要加入哦&#xff01; 加粗样式 加入的好朋友…

Inpaint 5.2安装说明

##一&#xff0e;软件简介&#xff1a; Inpaint 是一款可以从图片上去除不必要的物体&#xff0c;让您轻松摆脱照片上的水印、划痕、污渍、标志等瑕疵的实用型软件&#xff1b;简单说来&#xff0c;Inpaint 就是一款强大实用的图片去水印软件&#xff0c;您的图片中不想要的部分…

图片去水印工具:Inpaint 7.2中文专业破解版下载及使用方法

下载地址&#xff1a; 点我 Inpaint 是一款可以从图片上去除不必要的物体&#xff0c;让您轻松摆脱照片上的水印、划痕、污渍、标志等瑕疵的实用型软件&#xff1b;简单说来&#xff0c;Inpaint 就是一款强大实用的图片去水印软件&#xff0c;您的图片中不想要的部分&#xff0…

snipaste使用教程介绍

snipaste是一个简单但强大的截图工具&#xff0c;但是很多用户下载之后都不知道怎么用&#xff1f;今天小编带来的内容就是snipaste使用方法教程。 Win10纯净版_Win10 64位纯净版_Win10纯净精简版系统下载-系统部落 1、打开Snipaste首选&#xff0c;切换到常规&#xff0c;勾…

截图工具Snipaste

提示&#xff1a;今天介绍一个好用的截图工具 Snipaste介绍 软件名/版本&#xff1a; Snipaste-2.7.3-Beta-x64 Snipaste介绍&#xff1a;这里只谈一下我的使用感受吧&#xff0c;Snipaste有我们常用的截图样式&#xff0c;它有个好用的粘贴方式就是随意粘贴不影响你其它的操…

SQL SERVER Sequence Number 序列号

SequenceNumber是SQL Server2012推出的一个 新特性。这个特性允许数据库级别的序列号在多表或 多列之间共享。对于某些场景会非常有用&#xff0c;比如&#xff0c;你 需要在多个表之间公用一个流水号。以往的做法是额 外建立一个表&#xff0c;然后存储流水号。而新插入的流水…

Snipaste介绍、安装、使用技巧(截图贴图工具)

一、简介 Snipaste 是一个简单但强大的截图贴图工具&#xff0c;也可以让你将截图贴回到屏幕上&#xff01;下载并打开 Snipaste&#xff0c;按下 F1 来开始截图&#xff0c;再按 F3&#xff0c;截图就在桌面置顶显示了。就这么简单&#xff01; 你还可以将剪贴板里的文字…

iMindMap汉化免费下载序列号

iMindMap 是思维导图创始人托尼巴赞&#xff08;Tony Buzan&#xff09;开发的思维导图软件&#xff0c;线条自由&#xff0c;具有手绘功能。它结合独特的自由形态头脑风暴视图模式和系统的思维导图视图模式&#xff0c;特别适用于头脑风暴、策划和管理项目、创建演示文稿等。思…

【综合】简单加解密——寻找序列号

【综合】简单加解密——寻找序列号 下面文字对你可能有用(复制粘贴): #include <stdlib.h> #include <string.h> #include “malloc.h” #define MaxPass 66 // 最多66段密文 #define NumbPwdTable 5 // 密码表的份数 #define SizePwdTable 0x210 // 每份密码表占…

Inpaint破解版 - 图片去水印神器

Inpaint是一款强大实用的图片去水印软件&#xff0c;您的图片中不想要的部分&#xff0c;如额外的线&#xff0c;人物&#xff0c;文字等……选定后补绘都会帮你全自动进行擦除&#xff0c;同时补绘会根据附近图片区域重建擦除的区域&#xff0c;使看起来完美无暇&#xff0c;没…

截图软件 : Snipaste

说到截图软件&#xff0c;用过win10、win11的同学第一个想到的应当是PrtSc键或WinShiftS启动系统自带的截图软件&#xff0c;再“老”一点的可能会想到QQ截图。小编在之前也是怎么想的&#xff0c;因此看到其他小编写关于截图软件的文章就很不屑&#xff0c;认为这是多此一举。…

Source Insight 4.0 序列号 license文件

安装程序下载 在官网上下载Source Insight 4.0的安装程序. 版本4.00.0098可用 已经分享到网盘 链接: https://pan.baidu.com/s/1xyprwNSXLpj7kpDa7LaF_Q 提取码: v3cy 版本4.00.0124可用 https://pan.baidu.com/s/1paa_48tv1c0AHhBapqo2TA?pwdxnsx 提取码: xnsx 30天的…

CorelDRAW2021序列号 专业的矢量图像设计软件

CorelDRAW是一款专业的图像设计软件&#xff0c;提供一站式的图片修改功能&#xff0c;附带功能强劲的点阵图向矢量图转化的工具&#xff0c;使用方便简单&#xff0c;是设计师们的必不可少的软件。详见文章内容。 CDR2021新功能&#xff1a; 1、颠覆性协作工具 CorelDRAW …

Android Doze模式分析

Android 6.0 Doze模式分析 Doze模式是Android6.0上新出的一种模式,是一种全新的、低能耗的状态,在后台只有部分任务允许运行,其他都被强制停止。当用户一段时间没有使用手机的时候,Doze模式通过延缓app后台的CPU和网络活动减少电量的消耗。PowerManagerService中也有Doze模…

Android的Doze模式

也是偶然之间听到这个词的 Doze模式 Doze模式 Doze 翻译为打盹, 那么Android的Doze模式呢 , 就是让手机进入了类似打盹的一个状态 , 在这个半梦半醒的状态下 , 手机的后台、服务、广播等都会发生相应的延迟。 Doze模式在Android M&#xff08;6.0&#xff09;时引入&#xff0c…

Android---Alarm定时任务 Doze模式

Android的定时任务有两种&#xff0c;一种是JavaAPI提供的Timer类&#xff0c;另一种就是使用Android的Alarm机制。 Timer不太适合那些需要长期在后台运行的定时任务&#xff0c;因为每个手机都有自己的休眠策略&#xff0c;Android手机长时间不操作就会导致Timer定时任务无法…

Android 8.1 Doze模式分析(三)——Deep Doze模式

概述 Deep Doze&#xff0c;也就是Android的Doze模式了&#xff0c;表示深度Doze&#xff0c;比起LightDoze&#xff0c;它将进行更多的限制&#xff1a;无法进行网络访问和 GPS/WLAN 扫描、唤醒被忽略、闹钟和作业/同步被延迟。当然&#xff0c;它的触发条件也将更加苛刻&…

Android7.0 Doze模式

在Android M中&#xff0c;Google就引入了Doze模式。它定义了一种全新的、低能耗的状态。 在该状态&#xff0c;后台只有部分任务被允许运行&#xff0c;其它任务都被强制停止。 本篇博客中&#xff0c;我们就来分析一下Android 7.0中Doze模式相关的流程。 一、基本原理 Do…