import { ByteArray } from '../utils/ByteArray'; export class ParserUtils { public static arrayBufferToBase64(data: ArrayBuffer, mimeType: string): string { let byteStr: string = ''; const bytes: Uint8Array = new Uint8Array(data); const len: number = bytes.byteLength; for (let i = 0; i < len; i++) byteStr += String.fromCharCode(bytes[ i ]); const base64Image: string = window.btoa(byteStr); return 'data:' + mimeType + ';base64,' + base64Image; } public static arrayBufferToAudio(data: ArrayBuffer, fileType: string): HTMLAudioElement { const str: string = ParserUtils.arrayBufferToBase64(data, 'audio/' + fileType); const audio: HTMLAudioElement = new Audio(); audio.src = str; return audio; } /** * Converts an ArrayBuffer to a base64 string * * @param image data as a ByteArray * * @return HTMLImageElement * */ public static arrayBufferToImage(data: ArrayBuffer): HTMLImageElement { const str: string = ParserUtils.arrayBufferToBase64(data, 'image/png'); const img: HTMLImageElement = new Image(); img.src = str; return img; } /** * Converts an ByteArray to an Image - returns an HTMLImageElement * * @param image data as a ByteArray * * @return HTMLImageElement * */ public static byteArrayToImage(data: ByteArray): HTMLImageElement { const str: string = ParserUtils.arrayBufferToBase64(data.arraybytes, 'image/png'); const img: HTMLImageElement = new Image(); img.src = str; return img; } public static byteArrayToAudio(data: ByteArray, filetype: string): HTMLAudioElement { const str: string = ParserUtils.arrayBufferToBase64(data.arraybytes, 'audio/' + filetype); const audio: HTMLAudioElement = new Audio(); audio.src = str; return audio; } /** * Converts an Blob to an Image - returns an HTMLImageElement * * @param image data as a Blob * * @return HTMLImageElement * */ public static blobToImage(data: Blob): HTMLImageElement { const URLObj = window['URL'] || window['webkitURL']; const src = URLObj.createObjectURL(data); const img: HTMLImageElement = new Image(); img.src = src; return img; } /** * Converts an Blob to audio - returns an HTMLAudioElement * * @param audio data as a Blob * * @return HTMLAudioElement * */ public static blobToAudio(data: Blob): HTMLAudioElement { const URLObj = window['URL'] || window['webkitURL']; const src = URLObj.createObjectURL(data); const img: HTMLAudioElement = new Audio(); img.src = src; return img; } /** * Returns a object as ByteArray, if possible. * * @param data The object to return as ByteArray * * @return The ByteArray or null * */ public static toByteArray(data: any): ByteArray { const b: ByteArray = new ByteArray(); b.setArrayBuffer(data); return b; } /** * Returns a object as String, if possible. * * @param data The object to return as String * @param length The length of the returned String * * @return The String or null * */ public static toString(data: any, length: number = 0): string { if (typeof data === 'string') { const s: string = data; if (s['substr'] != null) return s.substr(0, s.length); } if (data instanceof ByteArray) { const ba: ByteArray = data; ba.position = 0; return ba.readUTFBytes(Math.min(ba.getBytesAvailable(), length)); } return null; /* var ba:ByteArray; length ||= uint.MAX_VALUE; if (data is String) return String(data).substr(0, length); ba = toByteArray(data); if (ba) { ba.position = 0; return ba.readUTFBytes(Math.min(ba.bytesAvailable, length)); } return null; */ } }