Add function for stripping GPS data from original files
This commit is contained in:
parent
701055a35b
commit
1975e7f940
2
.vscode/settings.json
vendored
2
.vscode/settings.json
vendored
@ -30,6 +30,8 @@
|
||||
"nanoids",
|
||||
"nextjs",
|
||||
"parameterizes",
|
||||
"piexif",
|
||||
"piexifjs",
|
||||
"presigner",
|
||||
"Provia",
|
||||
"qaub",
|
||||
|
||||
@ -47,6 +47,7 @@
|
||||
"next-auth": "5.0.0-beta.18",
|
||||
"next-themes": "^0.3.0",
|
||||
"pg": "^8.12.0",
|
||||
"piexifjs": "^1.0.6",
|
||||
"postcss": "8.4.38",
|
||||
"react": "18.3.1",
|
||||
"react-dom": "18.3.1",
|
||||
|
||||
56
pnpm-lock.yaml
generated
56
pnpm-lock.yaml
generated
@ -122,6 +122,9 @@ importers:
|
||||
pg:
|
||||
specifier: ^8.12.0
|
||||
version: 8.12.0
|
||||
piexifjs:
|
||||
specifier: ^1.0.6
|
||||
version: 1.0.6
|
||||
postcss:
|
||||
specifier: 8.4.38
|
||||
version: 8.4.38
|
||||
@ -3447,6 +3450,9 @@ packages:
|
||||
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
|
||||
engines: {node: '>=8.6'}
|
||||
|
||||
piexifjs@1.0.6:
|
||||
resolution: {integrity: sha512-0wVyH0cKohzBQ5Gi2V1BuxYpxWfxF3cSqfFXfPIpl5tl9XLS5z4ogqhUCD20AbHi0h9aJkqXNJnkVev6gwh2ag==}
|
||||
|
||||
pify@2.3.0:
|
||||
resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
@ -4397,10 +4403,10 @@ snapshots:
|
||||
'@aws-crypto/sha1-browser': 3.0.0
|
||||
'@aws-crypto/sha256-browser': 3.0.0
|
||||
'@aws-crypto/sha256-js': 3.0.0
|
||||
'@aws-sdk/client-sso-oidc': 3.590.0(@aws-sdk/client-sts@3.590.0)
|
||||
'@aws-sdk/client-sts': 3.590.0
|
||||
'@aws-sdk/client-sso-oidc': 3.590.0
|
||||
'@aws-sdk/client-sts': 3.590.0(@aws-sdk/client-sso-oidc@3.590.0)
|
||||
'@aws-sdk/core': 3.588.0
|
||||
'@aws-sdk/credential-provider-node': 3.590.0(@aws-sdk/client-sso-oidc@3.590.0(@aws-sdk/client-sts@3.590.0))(@aws-sdk/client-sts@3.590.0)
|
||||
'@aws-sdk/credential-provider-node': 3.590.0(@aws-sdk/client-sso-oidc@3.590.0)(@aws-sdk/client-sts@3.590.0(@aws-sdk/client-sso-oidc@3.590.0))
|
||||
'@aws-sdk/middleware-bucket-endpoint': 3.587.0
|
||||
'@aws-sdk/middleware-expect-continue': 3.577.0
|
||||
'@aws-sdk/middleware-flexible-checksums': 3.587.0
|
||||
@ -4455,13 +4461,13 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- aws-crt
|
||||
|
||||
'@aws-sdk/client-sso-oidc@3.590.0(@aws-sdk/client-sts@3.590.0)':
|
||||
'@aws-sdk/client-sso-oidc@3.590.0':
|
||||
dependencies:
|
||||
'@aws-crypto/sha256-browser': 3.0.0
|
||||
'@aws-crypto/sha256-js': 3.0.0
|
||||
'@aws-sdk/client-sts': 3.590.0
|
||||
'@aws-sdk/client-sts': 3.590.0(@aws-sdk/client-sso-oidc@3.590.0)
|
||||
'@aws-sdk/core': 3.588.0
|
||||
'@aws-sdk/credential-provider-node': 3.590.0(@aws-sdk/client-sso-oidc@3.590.0(@aws-sdk/client-sts@3.590.0))(@aws-sdk/client-sts@3.590.0)
|
||||
'@aws-sdk/credential-provider-node': 3.590.0(@aws-sdk/client-sso-oidc@3.590.0)(@aws-sdk/client-sts@3.590.0(@aws-sdk/client-sso-oidc@3.590.0))
|
||||
'@aws-sdk/middleware-host-header': 3.577.0
|
||||
'@aws-sdk/middleware-logger': 3.577.0
|
||||
'@aws-sdk/middleware-recursion-detection': 3.577.0
|
||||
@ -4498,7 +4504,6 @@ snapshots:
|
||||
'@smithy/util-utf8': 3.0.0
|
||||
tslib: 2.6.2
|
||||
transitivePeerDependencies:
|
||||
- '@aws-sdk/client-sts'
|
||||
- aws-crt
|
||||
|
||||
'@aws-sdk/client-sso@3.590.0':
|
||||
@ -4544,13 +4549,13 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- aws-crt
|
||||
|
||||
'@aws-sdk/client-sts@3.590.0':
|
||||
'@aws-sdk/client-sts@3.590.0(@aws-sdk/client-sso-oidc@3.590.0)':
|
||||
dependencies:
|
||||
'@aws-crypto/sha256-browser': 3.0.0
|
||||
'@aws-crypto/sha256-js': 3.0.0
|
||||
'@aws-sdk/client-sso-oidc': 3.590.0(@aws-sdk/client-sts@3.590.0)
|
||||
'@aws-sdk/client-sso-oidc': 3.590.0
|
||||
'@aws-sdk/core': 3.588.0
|
||||
'@aws-sdk/credential-provider-node': 3.590.0(@aws-sdk/client-sso-oidc@3.590.0(@aws-sdk/client-sts@3.590.0))(@aws-sdk/client-sts@3.590.0)
|
||||
'@aws-sdk/credential-provider-node': 3.590.0(@aws-sdk/client-sso-oidc@3.590.0)(@aws-sdk/client-sts@3.590.0(@aws-sdk/client-sso-oidc@3.590.0))
|
||||
'@aws-sdk/middleware-host-header': 3.577.0
|
||||
'@aws-sdk/middleware-logger': 3.577.0
|
||||
'@aws-sdk/middleware-recursion-detection': 3.577.0
|
||||
@ -4587,6 +4592,7 @@ snapshots:
|
||||
'@smithy/util-utf8': 3.0.0
|
||||
tslib: 2.6.2
|
||||
transitivePeerDependencies:
|
||||
- '@aws-sdk/client-sso-oidc'
|
||||
- aws-crt
|
||||
|
||||
'@aws-sdk/core@3.588.0':
|
||||
@ -4618,14 +4624,14 @@ snapshots:
|
||||
'@smithy/util-stream': 3.0.1
|
||||
tslib: 2.6.2
|
||||
|
||||
'@aws-sdk/credential-provider-ini@3.590.0(@aws-sdk/client-sso-oidc@3.590.0(@aws-sdk/client-sts@3.590.0))(@aws-sdk/client-sts@3.590.0)':
|
||||
'@aws-sdk/credential-provider-ini@3.590.0(@aws-sdk/client-sso-oidc@3.590.0)(@aws-sdk/client-sts@3.590.0(@aws-sdk/client-sso-oidc@3.590.0))':
|
||||
dependencies:
|
||||
'@aws-sdk/client-sts': 3.590.0
|
||||
'@aws-sdk/client-sts': 3.590.0(@aws-sdk/client-sso-oidc@3.590.0)
|
||||
'@aws-sdk/credential-provider-env': 3.587.0
|
||||
'@aws-sdk/credential-provider-http': 3.587.0
|
||||
'@aws-sdk/credential-provider-process': 3.587.0
|
||||
'@aws-sdk/credential-provider-sso': 3.590.0(@aws-sdk/client-sso-oidc@3.590.0(@aws-sdk/client-sts@3.590.0))
|
||||
'@aws-sdk/credential-provider-web-identity': 3.587.0(@aws-sdk/client-sts@3.590.0)
|
||||
'@aws-sdk/credential-provider-sso': 3.590.0(@aws-sdk/client-sso-oidc@3.590.0)
|
||||
'@aws-sdk/credential-provider-web-identity': 3.587.0(@aws-sdk/client-sts@3.590.0(@aws-sdk/client-sso-oidc@3.590.0))
|
||||
'@aws-sdk/types': 3.577.0
|
||||
'@smithy/credential-provider-imds': 3.1.0
|
||||
'@smithy/property-provider': 3.1.0
|
||||
@ -4636,14 +4642,14 @@ snapshots:
|
||||
- '@aws-sdk/client-sso-oidc'
|
||||
- aws-crt
|
||||
|
||||
'@aws-sdk/credential-provider-node@3.590.0(@aws-sdk/client-sso-oidc@3.590.0(@aws-sdk/client-sts@3.590.0))(@aws-sdk/client-sts@3.590.0)':
|
||||
'@aws-sdk/credential-provider-node@3.590.0(@aws-sdk/client-sso-oidc@3.590.0)(@aws-sdk/client-sts@3.590.0(@aws-sdk/client-sso-oidc@3.590.0))':
|
||||
dependencies:
|
||||
'@aws-sdk/credential-provider-env': 3.587.0
|
||||
'@aws-sdk/credential-provider-http': 3.587.0
|
||||
'@aws-sdk/credential-provider-ini': 3.590.0(@aws-sdk/client-sso-oidc@3.590.0(@aws-sdk/client-sts@3.590.0))(@aws-sdk/client-sts@3.590.0)
|
||||
'@aws-sdk/credential-provider-ini': 3.590.0(@aws-sdk/client-sso-oidc@3.590.0)(@aws-sdk/client-sts@3.590.0(@aws-sdk/client-sso-oidc@3.590.0))
|
||||
'@aws-sdk/credential-provider-process': 3.587.0
|
||||
'@aws-sdk/credential-provider-sso': 3.590.0(@aws-sdk/client-sso-oidc@3.590.0(@aws-sdk/client-sts@3.590.0))
|
||||
'@aws-sdk/credential-provider-web-identity': 3.587.0(@aws-sdk/client-sts@3.590.0)
|
||||
'@aws-sdk/credential-provider-sso': 3.590.0(@aws-sdk/client-sso-oidc@3.590.0)
|
||||
'@aws-sdk/credential-provider-web-identity': 3.587.0(@aws-sdk/client-sts@3.590.0(@aws-sdk/client-sso-oidc@3.590.0))
|
||||
'@aws-sdk/types': 3.577.0
|
||||
'@smithy/credential-provider-imds': 3.1.0
|
||||
'@smithy/property-provider': 3.1.0
|
||||
@ -4663,10 +4669,10 @@ snapshots:
|
||||
'@smithy/types': 3.0.0
|
||||
tslib: 2.6.2
|
||||
|
||||
'@aws-sdk/credential-provider-sso@3.590.0(@aws-sdk/client-sso-oidc@3.590.0(@aws-sdk/client-sts@3.590.0))':
|
||||
'@aws-sdk/credential-provider-sso@3.590.0(@aws-sdk/client-sso-oidc@3.590.0)':
|
||||
dependencies:
|
||||
'@aws-sdk/client-sso': 3.590.0
|
||||
'@aws-sdk/token-providers': 3.587.0(@aws-sdk/client-sso-oidc@3.590.0(@aws-sdk/client-sts@3.590.0))
|
||||
'@aws-sdk/token-providers': 3.587.0(@aws-sdk/client-sso-oidc@3.590.0)
|
||||
'@aws-sdk/types': 3.577.0
|
||||
'@smithy/property-provider': 3.1.0
|
||||
'@smithy/shared-ini-file-loader': 3.1.0
|
||||
@ -4676,9 +4682,9 @@ snapshots:
|
||||
- '@aws-sdk/client-sso-oidc'
|
||||
- aws-crt
|
||||
|
||||
'@aws-sdk/credential-provider-web-identity@3.587.0(@aws-sdk/client-sts@3.590.0)':
|
||||
'@aws-sdk/credential-provider-web-identity@3.587.0(@aws-sdk/client-sts@3.590.0(@aws-sdk/client-sso-oidc@3.590.0))':
|
||||
dependencies:
|
||||
'@aws-sdk/client-sts': 3.590.0
|
||||
'@aws-sdk/client-sts': 3.590.0(@aws-sdk/client-sso-oidc@3.590.0)
|
||||
'@aws-sdk/types': 3.577.0
|
||||
'@smithy/property-provider': 3.1.0
|
||||
'@smithy/types': 3.0.0
|
||||
@ -4803,9 +4809,9 @@ snapshots:
|
||||
'@smithy/types': 3.0.0
|
||||
tslib: 2.6.2
|
||||
|
||||
'@aws-sdk/token-providers@3.587.0(@aws-sdk/client-sso-oidc@3.590.0(@aws-sdk/client-sts@3.590.0))':
|
||||
'@aws-sdk/token-providers@3.587.0(@aws-sdk/client-sso-oidc@3.590.0)':
|
||||
dependencies:
|
||||
'@aws-sdk/client-sso-oidc': 3.590.0(@aws-sdk/client-sts@3.590.0)
|
||||
'@aws-sdk/client-sso-oidc': 3.590.0
|
||||
'@aws-sdk/types': 3.577.0
|
||||
'@smithy/property-provider': 3.1.0
|
||||
'@smithy/shared-ini-file-loader': 3.1.0
|
||||
@ -8544,6 +8550,8 @@ snapshots:
|
||||
|
||||
picomatch@2.3.1: {}
|
||||
|
||||
piexifjs@1.0.6: {}
|
||||
|
||||
pify@2.3.0: {}
|
||||
|
||||
pirates@4.0.6: {}
|
||||
|
||||
6
src/types/piexif.d.ts
vendored
Normal file
6
src/types/piexif.d.ts
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
declare module 'piexifjs' {
|
||||
export function load(base64Url: string): Record<string, any>
|
||||
export function dump(exifObject: Record<string, any>): string
|
||||
export function insert(exifDataWithoutGps: string, base64Url: string): string
|
||||
export function remove(exifData: string): string
|
||||
}
|
||||
@ -1,5 +1,6 @@
|
||||
import { OrientationTypes, type ExifData } from 'ts-exif-parser';
|
||||
import { formatNumberToFraction, roundToString } from './number';
|
||||
import * as PiExif from 'piexifjs';
|
||||
|
||||
const OFFSET_REGEX = /[+-]\d\d:\d\d/;
|
||||
|
||||
@ -56,3 +57,21 @@ export const formatExposureCompensation = (exposureCompensation?: number) => {
|
||||
return undefined;
|
||||
}
|
||||
};
|
||||
|
||||
export const removeGpsFromFile = async (
|
||||
fileBytes: ArrayBuffer
|
||||
): Promise<Blob> => {
|
||||
const base64 = Buffer.from(fileBytes).toString('base64');
|
||||
const base64Url = `data:image/jpeg;base64,${base64}`;
|
||||
|
||||
const exifObject = PiExif.load(base64Url) as Record<string, any>;
|
||||
delete exifObject.GPS;
|
||||
const exifDataWithoutGps = PiExif.dump(exifObject);
|
||||
|
||||
const data = PiExif.insert(
|
||||
exifDataWithoutGps,
|
||||
base64Url,
|
||||
);
|
||||
|
||||
return fetch(data, { cache: 'no-store' }).then(res => res.blob());
|
||||
};
|
||||
|
||||
@ -29,10 +29,8 @@
|
||||
"target": "ES2017"
|
||||
},
|
||||
"include": [
|
||||
"next-env.d.ts",
|
||||
"**/*.ts",
|
||||
"**/*.tsx",
|
||||
".next/types/**/*.ts"
|
||||
"**/*.tsx"
|
||||
],
|
||||
"exclude": [
|
||||
"node_modules"
|
||||
|
||||
Loading…
Reference in New Issue
Block a user