diff options
Diffstat (limited to 'src/lib/media/util.ts')
-rw-r--r-- | src/lib/media/util.ts | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/src/lib/media/util.ts b/src/lib/media/util.ts index a27c71d82..75915de6b 100644 --- a/src/lib/media/util.ts +++ b/src/lib/media/util.ts @@ -1,7 +1,45 @@ +import {Dimensions} from './types' + export function extractDataUriMime(uri: string): string { return uri.substring(uri.indexOf(':') + 1, uri.indexOf(';')) } +// Fairly accurate estimate that is more performant +// than decoding and checking length of URI export function getDataUriSize(uri: string): number { - return Math.round((uri.length * 3) / 4) // very rough estimate + return Math.round((uri.length * 3) / 4) +} + +export function scaleDownDimensions( + dim: Dimensions, + max: Dimensions, +): Dimensions { + if (dim.width < max.width && dim.height < max.height) { + return dim + } + const wScale = dim.width > max.width ? max.width / dim.width : 1 + const hScale = dim.height > max.height ? max.height / dim.height : 1 + if (wScale < hScale) { + return {width: dim.width * wScale, height: dim.height * wScale} + } + return {width: dim.width * hScale, height: dim.height * hScale} +} + +export function isUriImage(uri: string) { + return /\.(jpg|jpeg|png).*$/.test(uri) +} + +export function blobToDataUri(blob: Blob): Promise<string> { + return new Promise((resolve, reject) => { + const reader = new FileReader() + reader.onloadend = () => { + if (typeof reader.result === 'string') { + resolve(reader.result) + } else { + reject(new Error('Failed to read blob')) + } + } + reader.onerror = reject + reader.readAsDataURL(blob) + }) } |