業(yè)務(wù)場(chǎng)景:webapp點(diǎn)擊圖片保存到相冊(cè)
使用的h5api:
plus.gallery(系統(tǒng)相冊(cè))http://www.html5plus.org/doc/zh_cn/gallery.html嘱函,plus.nativeObj.Bitmaphttp://www.html5plus.org/doc/zh_cn/nativeobj.html#plus.nativeObj.Bitmap
思路:點(diǎn)擊保存到相冊(cè)要調(diào)用保存到相冊(cè)的save方法胸遇,第一個(gè)參數(shù)為手機(jī)的本地文件路徑漫谷,這個(gè)就有一個(gè)問題我們需要將當(dāng)前的頁面的文件先存入手機(jī)的系統(tǒng)文件中膝迎,經(jīng)過api的尋找發(fā)現(xiàn)nativeObj中的bitmap是可以通過loadBase64Data()將base64轉(zhuǎn)換成原生圖片對(duì)象魁袜,之后使用bitmap.save可以將原生圖片對(duì)象放入系統(tǒng)文件并且通過成功回調(diào)獲得文件的地址,之后再調(diào)用先gallery的save()保存就好了襟己。
1.imageDown:入口函數(shù)(轉(zhuǎn)化的圖片base64家坎,成功回調(diào),失敗回調(diào))
2.bigmapTosave:調(diào)用保存bitmap的圖片到本機(jī)系統(tǒng)文件撬呢,為之后相冊(cè)保存提供路徑
注意:這里使用過的隨機(jī)一個(gè)字符串的作為存的安卓路徑名期吓,是因?yàn)槿绻麑懰劳瑐€(gè)路徑,不用的base64圖片對(duì)象會(huì)覆蓋原有的路徑倾芝,不同機(jī)型還沒測(cè)試讨勤,bitmap.save()中的saveOption的overwrite在我測(cè)試機(jī)上無效。故使用過這個(gè)方法
3.imageSaveByGallery:保存到相冊(cè)晨另,保存成功調(diào)用外部的成功的回調(diào)潭千,失敗調(diào)用失敗的回調(diào)
注意:當(dāng)你保存成功之后要記得使用bitmap.clear()清楚內(nèi)存,因?yàn)樵鷪D像的內(nèi)存占用較大借尿,文檔中有所提示
4.randomString:隨機(jī)一個(gè)字符串
完整代碼:
const?imageDown?=?function?(base64,?success,?error)?{
??var?bitmap?=?new?window.plus.nativeObj.Bitmap('image')
??bitmap.loadBase64Data(base64,?function?(i)?{
????bigmapToSave(bitmap,?success,?error)
??},?function?(err)?{
????window.plus.nativeUI(err.message)
??})
}
const?bigmapToSave?=?function?(bitmap,?success,?error)?{
??var?name?=?randomString(10)
??bitmap.save(`_doc/${name}.jpg`,?{?overwrite:?false?},?function?(event)?{
????console.log(event.target)
????imageSaveByGallery(event.target,?success,?error)
??},?function?(err)?{
????window.plus.nativeUI(err.message)
??})
}
const?imageSaveByGallery?=?function?(url,?success,?error)?{
??window.plus.gallery.save(url,?function?(event)?{
????const?tarbitmap?=?window.plus.nativeObj.Bitmap.getBitmapById('image')
????tarbitmap.clear()
????success()
??},?function?(err)?{
????window.plus.nativeUI(err.message)
????error()
??})
}
const?randomString?=?function?randomString?(e)?{
??e?=?e?||?32
??var?t?=?'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678'
??var?a?=?t.length
??var?n?=?''
??for?(var?i?=?0;?i?<?e;?i++)?n?+=?t.charAt(Math.floor(Math.random()?*?a))
??return?n
}
export?default?imageDown