摘要:需求是編寫一個(gè)頭像剪裁工具再封裝成為一個(gè)組件,然后根據(jù)功能開始逐步編寫代碼先是上傳圖片預(yù)覽圖片編輯圖片。
需求是編寫一個(gè)頭像剪裁工具再封裝成為一個(gè)組件,然后根據(jù)功能開始逐步編寫代碼:先是上傳圖片 => 預(yù)覽圖片 => 編輯圖片。
剛開始沒有去考慮兼容性的問題,直接編寫upload部分的代碼,參考了很多代碼還有HTML5 FILE API之后,發(fā)現(xiàn)很少有React編寫的這樣的代碼,因?yàn)橄牒?jiǎn)單一點(diǎn),所以直接就使用
let file = e.target.files[0]; let url = window.URL.createObjectURL(file); console.info(url); 打印出來的結(jié)果是: blob:http://localhost:3001/396d3dbb-be52-4fd4-aaf9-50c0c04ecef9
這個(gè)是個(gè)DOMString類型的返回值,根據(jù)MDN:
A DOMString containing an object URL that can be used to reference the contents of the specified source object.
然后我想使用canvas去加載這個(gè)文件再對(duì)這個(gè)文件做裁剪的操作,問題就來了,ctx.drawImage(img)不能直接去解析到這個(gè)DOMString再加載出來,后來網(wǎng)上發(fā)現(xiàn)確實(shí)要先轉(zhuǎn)化成dataURL才能被正常加載,然后就一直嘗試這樣的方案:
reader.readAsDataURL(file); 會(huì)報(bào)錯(cuò): Uncaught TypeError: Failed to execute "readAsDataURL" on "FileReader": parameter 1 is not of type "Blob
無法被FileReader.readAsDataURL()順利轉(zhuǎn)換,最后看了些stackoverflow上的方案,綜合了一下。
代碼如下:
import React from "react"; import ReactDOM from "react-dom"; class App extends React.Component{ constructor(props){ super(props); this.handleChange = this.handleChange.bind(this); } handleChange(e){ console.info(url); if (window.FileReader){ console.info("Support file reader"); let file = e.target.files[0]; let reader = new FileReader(); let img = new Image(); if(file && file.type.match("image.*")){ reader.readAsDataURL(file); }else{ console.info("Not match!") } reader.onload = e => { let ctx = this.canvas.getContext("2d"); img.src = reader.result; ctx.drawImage(img,10,10); } } } render(){ return} } ReactDOM.render(,document.getElementById("root"));
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/96427.html
摘要:實(shí)現(xiàn)原理簡(jiǎn)單,純技術(shù)處理圖片,幾乎不需要用到相關(guān)知識(shí)面向人群急于使用頭像裁剪組件的同學(xué)。裁剪框初始寬高上傳圖片后,裁剪區(qū)將預(yù)設(shè)為最大裁剪范圍。支持矩形裁剪目前九宮僅支持將圖片裁剪為正方形,不能裁剪為矩形,該功能將在后續(xù)優(yōu)化。 項(xiàng)目簡(jiǎn)介 本組件是vue下的頭像裁剪組件,可以直接拷貝代碼使用,無需安裝依賴 使用九宮格進(jìn)行裁剪,自由選擇裁剪區(qū)域。 實(shí)時(shí)預(yù)覽裁剪后效果。 可以將裁剪好的圖片,...
摘要:兼容性如何支持以及的設(shè)備的瀏覽器便可運(yùn)行不一一列舉一共不到行為什么體積這么小騰訊手內(nèi)大量的都會(huì)去不斷地從各個(gè)維度進(jìn)行性能優(yōu)化。騰訊內(nèi)部有哪些項(xiàng)目在用目前主要是興趣部落群等業(yè)務(wù)在用,剛剛開源出來,只要有裁剪圖片的地方都會(huì)用到。 傳送門 Github地址:https://github.com/AlloyTeam/AlloyFinger/tree/master/alloy_crop 在線De...
摘要:在編寫程序的過程中,經(jīng)常會(huì)遇到一個(gè)經(jīng)典的文件上傳場(chǎng)景上傳頭像圖片。基于對(duì)最好的用戶體驗(yàn)的追求,寫一下之前在項(xiàng)目中實(shí)現(xiàn)在項(xiàng)目中的上傳頭像。 在編寫web程序的過程中,經(jīng)常會(huì)遇到一個(gè)經(jīng)典的文件上傳場(chǎng)景:上傳頭像(圖片)。基于對(duì)最好的用戶體驗(yàn)的追求,寫一下之前在項(xiàng)目中實(shí)現(xiàn)在Laravel項(xiàng)目中的Ajax上傳頭像。 1.配置路由 在Laravel的routes.php中設(shè)置路由: Rou...
摘要:除官方外的參考文章微信小程序?qū)嵗齽?chuàng)建下發(fā)模板消息實(shí)例手把手教你開發(fā)微信小程序之模版消息開發(fā)教你突破小程序模板消息的推送限制獲取用戶信息接口的廢棄問題接口是獲取用戶信息昵稱,頭像等的接口,在官方文檔上寫是即將廢棄。 ----------------更新-------------- 2018年10月10日官網(wǎng)3個(gè)接口廢棄的通知: 1、分享監(jiān)聽接口分享消息給好友時(shí),開發(fā)者將無法從callba...
閱讀 4307·2021-09-24 09:47
閱讀 1187·2021-09-03 10:33
閱讀 2068·2019-08-30 11:13
閱讀 1034·2019-08-30 10:49
閱讀 1756·2019-08-29 16:13
閱讀 2049·2019-08-29 11:28
閱讀 3096·2019-08-26 13:31
閱讀 3636·2019-08-23 17:14