51 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
		
		
			
		
	
	
			51 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
|  | /** | ||
|  |  * DataURI to ArrayBuffer | ||
|  |  * @param {*} dataURI  | ||
|  |  */ | ||
|  | export function dataURIToArrayBuffer(dataURI) { | ||
|  |   // 'data:image/jpeg;dataURI,...' => 'image/jpeg'
 | ||
|  |   // contentType = contentType || dataURI.match(/^data:([^;]+);base64,/mi)[1] || ''
 | ||
|  |   dataURI = dataURI.replace(/^data:([^;]+);base64,/gim, '').replace(/\s/g, '') | ||
|  | 
 | ||
|  |   const binary = atob(dataURI) | ||
|  |   const len = binary.length | ||
|  |   const buffer = new ArrayBuffer(len) | ||
|  |   const view = new Uint8Array(buffer) | ||
|  | 
 | ||
|  |   for (let i = 0; i < len; i++) { | ||
|  |     view[i] = binary.charCodeAt(i) | ||
|  |   } | ||
|  | 
 | ||
|  |   return buffer | ||
|  | } | ||
|  | 
 | ||
|  | /** | ||
|  |  * Base64 to Blob | ||
|  |  * @param  {String} dataURI | ||
|  |  */ | ||
|  | export function dataURItoBlob(dataURI) { | ||
|  |   // convert base64/URLEncoded data component to raw binary data held in a string
 | ||
|  |   let byteString | ||
|  | 
 | ||
|  |   if (dataURI.split(',')[0].indexOf('base64') >= 0) { | ||
|  |     byteString = atob(dataURI.split(',')[1]) | ||
|  |   } else { | ||
|  |     byteString = unescape(dataURI.split(',')[1]) | ||
|  |   } | ||
|  | 
 | ||
|  |   // separate out the mime component
 | ||
|  |   const mimeString = dataURI | ||
|  |     .split(',')[0] | ||
|  |     .split(':')[1] | ||
|  |     .split(';')[0] | ||
|  | 
 | ||
|  |   // write the bytes of the string to a typed array
 | ||
|  |   const ia = new Uint8Array(byteString.length) | ||
|  | 
 | ||
|  |   for (let i = 0; i < byteString.length; i++) { | ||
|  |     ia[i] = byteString.charCodeAt(i) | ||
|  |   } | ||
|  | 
 | ||
|  |   return new Blob([ia.buffer], {type: mimeString}) | ||
|  | } |