最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

一、壓縮圖片

壓縮原理:

將圖片讀入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>

運行效果:

壓縮率

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

可見,壓縮效果還是非常不錯的。

二、加密圖片

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

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

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

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

而只需對此編碼做小小修改,哪怕僅是改動一個字符,也會讓圖片無法正常顯示。

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

運行效果,輸出加密后的base64編碼:

測試一下:

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

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

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

輸入密碼:

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

源碼:

<script>
function jm(){undefined
var pass = prompt('請輸入口令','');
if (pass != "1"+"2"+"3"){undefined
alert("口令錯誤。");
}
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)頁中還有另外幾個元素:

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

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

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

到目前為止,確實存在這個問題。所以,還要更進一步:

口令可以被看到,是因為javascript代碼透明,那么,就要對解密的js代碼加密了,加密后,口令將不可見。

JShaman對JS代碼進行混淆加密:

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

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

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

總結(jié)

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

相關(guān)文章

  • js中try?catch使用遇到的問題

    js中try?catch使用遇到的問題

    大家應(yīng)該都知道try…catch的作用是測試代碼中的錯誤,下面這篇文章主要給大家介紹了關(guān)于js中try?catch使用遇到的問題,文中將問題的解決辦法介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • 淺析JavaScript中var that=this

    淺析JavaScript中var that=this

    this是Javascript語言的一個關(guān)鍵字。它代表函數(shù)運行時,自動生成的一個內(nèi)部對象,只能在函數(shù)內(nèi)部使用。接下來通過本文給大家分享JavaScript中var that=this所代表的意思,需要的朋友參考下吧
    2017-02-02
  • JavaScript中call和apply方法的區(qū)別實例分析

    JavaScript中call和apply方法的區(qū)別實例分析

    這篇文章主要介紹了JavaScript中call和apply方法的區(qū)別,結(jié)合實例形式分析call和apply方法的功能、原理及相關(guān)使用操作區(qū)別,需要的朋友可以參考下
    2018-08-08
  • 動態(tài)讀取JSON解析鍵值對的方法

    動態(tài)讀取JSON解析鍵值對的方法

    這篇文章主要介紹了動態(tài)讀取JSON解析鍵值對的方法,需要的朋友可以參考下
    2014-06-06
  • Js中安全獲取Object深層對象的方法實例

    Js中安全獲取Object深層對象的方法實例

    Object是JavaScript基本數(shù)據(jù)類型之一(function也屬于object,是特殊的object),其存儲于堆中,這篇文章主要給大家介紹了關(guān)于Js中安全獲取Object深層對象的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • javascript實現(xiàn)的淘寶旅行通用日歷組件用法實例

    javascript實現(xiàn)的淘寶旅行通用日歷組件用法實例

    這篇文章主要介紹了javascript實現(xiàn)的淘寶旅行通用日歷組件,以實例形式分析了該日歷組件的相關(guān)設(shè)置及使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-08-08
  • JS消息彈框alert、confirm、prompt的實現(xiàn)代碼

    JS消息彈框alert、confirm、prompt的實現(xiàn)代碼

    這篇文章主要介紹了JS消息彈框alert、confirm、prompt,文中還給大家介紹了js的三大基礎(chǔ)彈框,結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • 詳解JavaScript狀態(tài)容器Redux

    詳解JavaScript狀態(tài)容器Redux

    Redux官網(wǎng)上是這樣描述Redux,Redux is a predictable state container for JavaScript apps.(Redux是JavaScript狀態(tài)容器,提供可預(yù)測性的狀態(tài)管理)。目前Redux GitHub有5w多star,足以說明 Redux 受歡迎的程度
    2021-06-06
  • javascript實現(xiàn)頁面內(nèi)關(guān)鍵詞高亮顯示代碼

    javascript實現(xiàn)頁面內(nèi)關(guān)鍵詞高亮顯示代碼

    關(guān)鍵詞高亮想必大家對它都不陌生吧,應(yīng)用也比較廣泛的,下面為大家介紹下通過javascript是如何實現(xiàn)頁面內(nèi)關(guān)鍵詞高亮顯示
    2014-04-04
  • JavaScript 解析數(shù)學(xué)表達(dá)式的過程詳解

    JavaScript 解析數(shù)學(xué)表達(dá)式的過程詳解

    這篇文章主要介紹了JavaScript 解析數(shù)學(xué)表達(dá)式的過程詳解,本文以一個的解題思路,來分享如何解決問題,解決的過程,可以作為解決工作中一般問題的通用思路,對js解析表達(dá)式相關(guān)知識感興趣的朋友一起看看吧
    2022-06-06

最新評論

双峰县| 延边| 霍林郭勒市| 钟山县| 镇宁| 四会市| 鲁山县| 武陟县| 东光县| 连州市| 贵南县| 逊克县| 仁寿县| 林芝县| 建水县| 宜兰县| 达孜县| 延川县| 崇文区| 成安县| 尚义县| 通海县| 东莞市| 南京市| 汶上县| 诸暨市| 全椒县| 巴彦淖尔市| 滁州市| 湟源县| 连江县| 科尔| 贵港市| 浙江省| 永年县| 错那县| 巢湖市| 海南省| 尚义县| 海林市| 大关县|