@awayjs/core
Version:
AwayJS core classes
151 lines (129 loc) • 3.78 kB
text/typescript
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 = <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 = <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 = <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 = <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 = <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 = <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 = <string> data;
if (s['substr'] != null)
return s.substr(0, s.length);
}
if (data instanceof ByteArray) {
const ba: ByteArray = <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;
*/
}
}