diff options
author | Michael Staub <michael.staub@brightmachines.com> | 2023-02-23 16:34:25 -0800 |
---|---|---|
committer | Michael Staub <michael.staub@brightmachines.com> | 2023-02-23 16:34:25 -0800 |
commit | 693cbb9f18eeec48ea6ed3eb03ff3a96ca6ec7dc (patch) | |
tree | 192494fe0751aa279209f447587c311efcd33668 /src/lib/media/manip.web.ts | |
parent | 23f07d8def1f4384022c7fecd0d7eac0ba8b2efc (diff) | |
parent | bbd0b03a46b1087ecca17219441d060c2be69de2 (diff) | |
download | voidsky-693cbb9f18eeec48ea6ed3eb03ff3a96ca6ec7dc.tar.zst |
Merge branch 'rnw' of github.com:bluesky-social/social-app into rnw
Diffstat (limited to 'src/lib/media/manip.web.ts')
-rw-r--r-- | src/lib/media/manip.web.ts | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/src/lib/media/manip.web.ts b/src/lib/media/manip.web.ts new file mode 100644 index 000000000..e617d01af --- /dev/null +++ b/src/lib/media/manip.web.ts @@ -0,0 +1,88 @@ +// import {Share} from 'react-native' +// import * as Toast from 'view/com/util/Toast' + +export interface DownloadAndResizeOpts { + uri: string + width: number + height: number + mode: 'contain' | 'cover' | 'stretch' + maxSize: number + timeout: number +} + +export interface Image { + path: string + mime: string + size: number + width: number + height: number +} + +export async function downloadAndResize(_opts: DownloadAndResizeOpts) { + // TODO + throw new Error('TODO') +} + +export interface ResizeOpts { + width: number + height: number + mode: 'contain' | 'cover' | 'stretch' + maxSize: number +} + +export async function resize( + _localUri: string, + _opts: ResizeOpts, +): Promise<Image> { + // TODO + throw new Error('TODO') +} + +export async function compressIfNeeded( + img: Image, + maxSize: number, +): Promise<Image> { + if (img.size > maxSize) { + // TODO + throw new Error( + "This image is too large and we haven't implemented compression yet -- sorry!", + ) + } + return img +} + +export interface Dim { + width: number + height: number +} +export function scaleDownDimensions(dim: Dim, max: Dim): Dim { + if (dim.width < max.width && dim.height < max.height) { + return dim + } + let wScale = dim.width > max.width ? max.width / dim.width : 1 + let 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 async function saveImageModal(_opts: {uri: string}) { + // TODO + throw new Error('TODO') +} + +export async function moveToPremanantPath(path: string) { + return path +} + +export async function getImageDim(path: string): Promise<Dim> { + var img = document.createElement('img') + const promise = new Promise((resolve, reject) => { + img.onload = resolve + img.onerror = reject + }) + img.src = path + await promise + return {width: img.width, height: img.height} +} |