摘要:預(yù)覽效果不廢話,貼源碼讀取文件導(dǎo)出文件地址取到圖片原始尺寸解決透明圖片,出現(xiàn)黑色背景的問題如果不存在,或者異常錯誤,不影響后續(xù)執(zhí)行根據(jù)設(shè)置的,進行尺寸壓縮對預(yù)覽圖進行質(zhì)量壓縮導(dǎo)出的圖片路徑調(diào)用
預(yù)覽效果:
不廢話,貼源碼:
f.getFileAsUrl = function(file, back) { var reader = new FileReader(); // 讀取文件base64 reader.readAsDataURL(file); reader.onload = function(evt) { // 導(dǎo)出文件地址 back(evt.target.result); } }; f.getBase64 = function(img) { var canvas = document.createElement("canvas"); canvas.width = img.width; canvas.height = img.height; var ctx = canvas.getContext("2d"); ctx.drawImage(img, 0, 0, img.width, img.height); var ext = img.src.substring(img.src.lastIndexOf(".") + 1).toLowerCase(); var dataURL = canvas.toDataURL("image/" + ext); return dataURL; }; f.zipImgBackUrl = function(base64Img, back, size) { var c = document.createElement("canvas"); var ctx = c.getContext("2d"); var img = new Image(); img.src = base64Img; img.onload = function() { // 取到圖片原始尺寸 var w = img.width; var h = img.height; if (size.width && size.height) { if (size.width > size.height) { size.height = false; } else { size.width = false; } } if (!size) { c.width = w; c.height = h; } else if (size.width) { if (size.width < w) { c.width = size.width; c.height = h * size.width / w; } else { c.width = w; c.height = h; } } else if (size.height) { if (size.height < h) { c.height = size.height; c.width = w * size.height / h; } else { c.width = w; c.height = h; } } // 解決透明圖片,出現(xiàn)黑色背景的問題 var opacityImg = new Image(); var base64 = localStorage.getItem("opacityImg"); var hasLocal = base64 && /^data:image/.test(base64); if (hasLocal) { opacityImg.src = base64; } else { opacityImg.src = "/images/opacity-bg.jpg"; } opacityImg.onload = function() { if (!hasLocal) { base64 = f.getBase64(opacityImg); localStorage.setItem("opacityImg", base64); } ctx.fillStyle = ctx.createPattern(opacityImg, "repeat"); fillImg(ctx,c,img,back); }; //如果opacityImg不存在,或者異常錯誤,不影響后續(xù)執(zhí)行 opacityImg.onerror = function(){ ctx.fillStyle = "#f0f0f0"; fillImg(ctx,c,img,back); }; function fillImg(ctx,c,img,back){ ctx.fillRect(0, 0, c.width, c.height); // 根據(jù)設(shè)置的size,進行尺寸壓縮 ctx.drawImage(img, 0, 0, w, h, 0, 0, c.width, c.height); //對預(yù)覽圖進行質(zhì)量壓縮 var src = c.toDataURL("image/jpeg", 0.5); // 導(dǎo)出base64的圖片路徑 back(src); } }; };
調(diào)用:
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/93935.html
摘要:以上傳圖片為例。我們可以通過獲取上傳的圖片相關(guān)信息,但是想要實現(xiàn)本地預(yù)覽還需要借助來實現(xiàn)可以讀取本地圖片,并將圖片數(shù)據(jù)轉(zhuǎn)換成編碼的字符串形式嵌入到頁面中。在我們實現(xiàn)上傳圖片的效果里,就有用到。圖片預(yù)覽兼容處理及以下版本不支持和。 最近項目里需要用到上傳圖片并預(yù)覽的功能,于是寫了個jQuery預(yù)覽圖片插件,下載地址。如果有需要的,可以直接下載。第一次寫jQuery插件,如有不對之處,歡迎...
摘要:與介紹只是對象的一個屬性,可以判斷圖片加載完成,不管圖片是不是有緩存而則是這個對象的事件回調(diào),當圖片加載完成后執(zhí)行綁定的函數(shù)。第三次點擊,谷歌瀏覽器結(jié)果為瀏覽器結(jié)果為。例打印結(jié)果第一次點擊,谷歌瀏覽器結(jié)果為瀏覽器結(jié)果為空。 onload與complete介紹 complete只是HTMLImageElement對象的一個屬性,可以判斷圖片加載完成,不管圖片是不是有緩存;而onload則...
摘要:簡介本文結(jié)合實際項目場景,記錄圖片上傳時的一種本地壓縮預(yù)覽解決方案。考慮到這些問題,決定采用本地圖片進行預(yù)覽。解決過程接下來說明將待上傳的本地圖片展示到界面中。這樣就在前端實現(xiàn)了簡單的圖片壓縮處理。 簡介 本文結(jié)合實際項目場景,記錄圖片上傳時的一種本地壓縮預(yù)覽解決方案。這里的本地預(yù)覽是指,頁面上的圖片是讀取的本機資源進行展示,而沒有通過網(wǎng)絡(luò)請求加載。 實際的項目場景 在這陣子的項目開發(fā)...
摘要:使用監(jiān)聽的,一旦有發(fā)生,就表示服務(wù)器回傳了信息增加上傳文件類型限制思考這種方式對于單張圖片上傳沒有問題,如果是多張,該怎樣優(yōu)化 實現(xiàn)邏輯 首先要知道, ajax無法發(fā)送帶有文件的post請求所以,所以還是要用同步的方式,但是刷新的時候,我們不要在原來的頁面刷新,去一個隱藏的iframe里面刷新,form表單中action正常填寫處理文件上傳的操作。緊著著的target填寫一個隱藏的if...
閱讀 3039·2021-09-08 10:43
閱讀 1036·2019-08-30 15:53
閱讀 980·2019-08-30 13:51
閱讀 845·2019-08-29 14:03
閱讀 803·2019-08-26 18:35
閱讀 1234·2019-08-26 13:38
閱讀 1584·2019-08-26 10:34
閱讀 3503·2019-08-26 10:21