欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript壓縮并加密圖片的方法你了解嗎

 更新時(shí)間:2022年03月07日 16:57:22   作者:w2sfot  
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)學(xué)生成績管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

一、壓縮圖片

壓縮原理:

將圖片讀入canvas,并使用canvas的toDataURL方法將圖片base64化,在此過程中,可以設(shè)定quality值,即圖片質(zhì)量值,值為0.1到1之間,值越小,壓縮度越高。

完整代碼:

<body>
<script src="jquery-3.5.1.min.js"></script>
<input id="file" type="file" capture="microphone" accept="image/*">

壓縮后的圖片:<span id="sz"></span>

<img id="pic" >
<script>
$("#file").change(function(){undefined
var m_this = this;
cutImageBase64(m_this,null,900,0.7);
})
function cutImageBase64(m_this,id,wid,quality) {undefined
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() {undefined
var that = this;
//生成比例
var w = that.width,
h = that.height,
scale = w / h;
w = wid || w;
h = w / scale;
//生成canvas
var canvas = document.createElement('canvas');
var ctx = canvas.getContext('2d');
$(canvas).attr({undefined
width: w,
height: h
});
ctx.drawImage(that, 0, 0, w, h);
// 生成base64
base64 = canvas.toDataURL('image/jpeg', quality || 0.9);
document.getElementById("pic").src=base64;
document.getElementById("sz").innerHTML = parseInt(base64.length/2014,0) + "kb";
};
}
</script>
</body>

運(yùn)行效果:

壓縮率

上圖中可以看到,壓縮后圖片的大小是28KB,而原始的文件大小是400多KB:

可見,壓縮效果還是非常不錯(cuò)的。

二、加密圖片

前面所述的圖片壓縮,是很實(shí)用的技術(shù),接下來才是本文重點(diǎn),展示一個(gè)奇淫技巧:圖片加密。

之所以即講壓縮壓縮,又談圖片加密,是因?yàn)閳D片加密是于前面壓縮技術(shù)的基礎(chǔ)上完成的。

上面的代碼中,toDataURL產(chǎn)生的是圖片的base64編碼。

Base64編碼必須是完整且正確才能正常顯示圖片。

而只需對此編碼做小小修改,哪怕僅是改動(dòng)一個(gè)字符,也會(huì)讓圖片無法正常顯示。

那么,程序中給編碼某個(gè)位置增加一個(gè)字符,以達(dá)到破壞正確編碼進(jìn)而實(shí)現(xiàn)加密的效果:

運(yùn)行效果,輸出加密后的base64編碼:

測試一下:

效果如下,圖片無法正常顯示。

那么,接下來將實(shí)現(xiàn)這樣的效果:

在網(wǎng)頁中,用img的src引入加密的base64字符,此時(shí)圖片是不能顯示的。然后,可以輸入密碼,當(dāng)密碼正確時(shí),解密base64字符,讓圖片正常顯示。

輸入密碼:

密碼正確,解密并顯示圖片:

源碼:

<script>
function jm(){undefined
var pass = prompt('請輸入口令','');
if (pass != "1"+"2"+"3"){undefined
alert("口令錯(cuò)誤。");
}
else{undefined
var base64_2 = document.getElementById("txt").value.toString();
//解密
var base64_3 = base64_2.substring(0,26) + base64_2.substring(27,base64_2.length);
document.getElementById("pic").src=base64_3;
document.getElementById("bt").style.display = "none";
}
}
</script>

網(wǎng)頁中還有另外幾個(gè)元素:

input中用于存放加密的base64編碼,即上文中的js代碼功能所生成并加密的內(nèi)容;

img用于顯示解密后的圖片;還有一個(gè)按鈕,點(diǎn)擊時(shí)調(diào)用解密函數(shù)。

可能有人已經(jīng)發(fā)現(xiàn):雖然圖片編碼經(jīng)過了加密,而且增加了口令保護(hù),但是只要查看網(wǎng)頁源碼,就可以知道口令,這樣完全沒有起到加密的效果。

到目前為止,確實(shí)存在這個(gè)問題。所以,還要更進(jìn)一步:

口令可以被看到,是因?yàn)閖avascript代碼透明,那么,就要對解密的js代碼加密了,加密后,口令將不可見。

JShaman對JS代碼進(jìn)行混淆加密:

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

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

這樣就實(shí)現(xiàn)了完整的圖片加密:將圖片加密存放到了單獨(dú)的html中,可以方便的攜帶、存儲(chǔ)、傳遞。而內(nèi)容是加密的、口令也是加密的。只有知道口令的人,才能看到圖片。

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!   

相關(guān)文章

  • Javascript 設(shè)計(jì)模式(二) 閉包

    Javascript 設(shè)計(jì)模式(二) 閉包

    本來應(yīng)該是第二章,接口,但因?yàn)殚]包實(shí)在不懂,所以先看看閉包
    2010-05-05
  • Javascript讀寫cookie的實(shí)例源碼

    Javascript讀寫cookie的實(shí)例源碼

    今天小編就為大家分享一篇關(guān)于Javascript讀寫cookie的實(shí)例源碼,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • 詳釋JavaScript執(zhí)行環(huán)境與執(zhí)行棧

    詳釋JavaScript執(zhí)行環(huán)境與執(zhí)行棧

    一句話就可以概括:代碼 ( 包括函數(shù) ) 執(zhí)行時(shí)所需要的所有信息就是執(zhí)行環(huán)境。由于 ES 歷經(jīng)多個(gè)版本,所以執(zhí)行環(huán)境的標(biāo)準(zhǔn)也一直在變。文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • JavaScript實(shí)現(xiàn)數(shù)組去重的十種方法分享

    JavaScript實(shí)現(xiàn)數(shù)組去重的十種方法分享

    去重是開發(fā)中經(jīng)常會(huì)碰到的一個(gè)熱點(diǎn)問題,這篇文章主要介紹了JavaScript中實(shí)現(xiàn)數(shù)組去重的10種方法,文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-11-11
  • tweenjs緩動(dòng)算法的使用實(shí)例分析

    tweenjs緩動(dòng)算法的使用實(shí)例分析

    這篇文章主要介紹了tweenjs緩動(dòng)算法的使用,結(jié)合實(shí)例形式分析了Tween.js插件的原理與使用技巧,需要的朋友可以參考下
    2019-08-08
  • 深入了解JavaScript 的 WebAssembly

    深入了解JavaScript 的 WebAssembly

    這篇文章主要介紹了深入了解JavaScript 的 WebAssembly,它是由 Google , Microsoft , Mozilla , Apple 等幾家大公司合作發(fā)起的一個(gè)關(guān)于 面向Web的通用二進(jìn)制和文本格式 的項(xiàng)目。 ,需要的朋友可以參考下
    2019-06-06
  • 解決Layui當(dāng)中的導(dǎo)航條動(dòng)態(tài)添加后渲染失敗的問題

    解決Layui當(dāng)中的導(dǎo)航條動(dòng)態(tài)添加后渲染失敗的問題

    今天小編就為大家分享一篇解決Layui當(dāng)中的導(dǎo)航條動(dòng)態(tài)添加后渲染失敗的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • Javascript對象Clone實(shí)例分析

    Javascript對象Clone實(shí)例分析

    這篇文章主要介紹了Javascript對象Clone用法,實(shí)例分析了javascript對象克隆的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • 網(wǎng)頁中可關(guān)閉的漂浮窗口實(shí)現(xiàn)可自行調(diào)節(jié)

    網(wǎng)頁中可關(guān)閉的漂浮窗口實(shí)現(xiàn)可自行調(diào)節(jié)

    廣告式的漂浮窗口,想必大家并不陌生吧,下面為大家簡單介紹下具體的實(shí)現(xiàn),有需要的朋友可以參考下
    2013-08-08
  • js中的preventDefault與stopPropagation詳解

    js中的preventDefault與stopPropagation詳解

    本篇文章主要是對js中的preventDefault與stopPropagation進(jìn)行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-01-01

最新評論