@lodev09/react-native-exify 0.2.0 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -7
- package/android/build.gradle +2 -2
- package/android/src/main/java/com/exify/ExifyModule.kt +0 -1
- package/ios/Exify.swift +25 -19
- package/ios/ExifyUtils.swift +13 -9
- package/lib/typescript/src/types.d.ts +11 -5
- package/lib/typescript/src/types.d.ts.map +1 -1
- package/package.json +8 -3
- package/src/types.ts +11 -5
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
#
|
|
1
|
+
# React Native Exify
|
|
2
2
|
|
|
3
|
-
A simple library to read and write image Exif metadata in React Native.
|
|
3
|
+
A simple library to read and write image Exif metadata in React Native. Inspired from [this thread](https://github.com/mrousavy/react-native-vision-camera/issues/780).
|
|
4
4
|
|
|
5
5
|
## Features
|
|
6
6
|
- Read Exif data from an image
|
|
@@ -33,17 +33,20 @@ console.log(tags)
|
|
|
33
33
|
```ts
|
|
34
34
|
const uri = 'file://path/to/image.jpg'
|
|
35
35
|
const newTags: ExifTags = {
|
|
36
|
-
GPSLatitude: 69.
|
|
37
|
-
GPSLongitude: 69.
|
|
36
|
+
GPSLatitude: 69.69,
|
|
37
|
+
GPSLongitude: 69.69,
|
|
38
38
|
UserComment: 'Someone wrote GPS here!',
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
const result = await writeAsync(uri, newTags)
|
|
42
|
-
console.log(result)
|
|
42
|
+
console.log(result.tags)
|
|
43
43
|
```
|
|
44
44
|
|
|
45
|
-
|
|
46
|
-
|
|
45
|
+
See [example](example) for more detailed usage.
|
|
46
|
+
|
|
47
|
+
ℹ️ Note that on IOS, writing exif into an Asset file will duplicate the image. IOS does not allow writing exif into an Asset file directly.
|
|
48
|
+
|
|
49
|
+
If you're getting the photo from a [camera](https://github.com/mrousavy/react-native-vision-camera/), write it into the output file first before saving to the Asset library!
|
|
47
50
|
|
|
48
51
|
## Contributing
|
|
49
52
|
Contributions are welcome!
|
package/android/build.gradle
CHANGED
|
@@ -87,9 +87,9 @@ def kotlin_version = getExtOrDefault("kotlinVersion")
|
|
|
87
87
|
dependencies {
|
|
88
88
|
// For < 0.71, this will be from the local maven repo
|
|
89
89
|
// For > 0.71, this will be replaced by `com.facebook.react:react-android:$version` by react gradle plugin
|
|
90
|
-
//noinspection GradleDynamicVersion
|
|
90
|
+
// noinspection GradleDynamicVersion
|
|
91
91
|
implementation "com.facebook.react:react-native:+"
|
|
92
92
|
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
|
93
|
-
implementation
|
|
93
|
+
implementation "androidx.exifinterface:exifinterface:1.3.7"
|
|
94
94
|
}
|
|
95
95
|
|
package/ios/Exify.swift
CHANGED
|
@@ -11,14 +11,19 @@ import PhotosUI
|
|
|
11
11
|
|
|
12
12
|
@objc(Exify)
|
|
13
13
|
class Exify: NSObject {
|
|
14
|
-
|
|
15
|
-
func
|
|
16
|
-
let
|
|
17
|
-
|
|
14
|
+
|
|
15
|
+
func readExif(uri: String, resolve: @escaping RCTPromiseResolveBlock) -> Void {
|
|
16
|
+
guard let url = URL(string: uri) else {
|
|
17
|
+
resolve(nil)
|
|
18
|
+
return
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
readExifTags(from: url) { tags in
|
|
22
|
+
resolve(tags)
|
|
23
|
+
}
|
|
18
24
|
}
|
|
19
25
|
|
|
20
|
-
func
|
|
21
|
-
let assetId = String(uri[uri.index(uri.startIndex, offsetBy: 5)...])
|
|
26
|
+
func readExif(assetId: String, resolve: @escaping RCTPromiseResolveBlock) -> Void {
|
|
22
27
|
guard let asset = getAssetBy(id: assetId) else {
|
|
23
28
|
resolve(nil)
|
|
24
29
|
return
|
|
@@ -33,13 +38,13 @@ class Exify: NSObject {
|
|
|
33
38
|
return
|
|
34
39
|
}
|
|
35
40
|
|
|
36
|
-
|
|
37
|
-
|
|
41
|
+
readExifTags(from: url) { tags in
|
|
42
|
+
resolve(tags)
|
|
43
|
+
}
|
|
38
44
|
}
|
|
39
45
|
}
|
|
40
46
|
|
|
41
|
-
func
|
|
42
|
-
let assetId = String(uri[uri.index(uri.startIndex, offsetBy: 5)...])
|
|
47
|
+
func writeExif(assetId: String, tags: [String: Any], resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
43
48
|
guard let asset = getAssetBy(id: assetId) else {
|
|
44
49
|
reject("Error", "Cannot retrieve asset.", nil)
|
|
45
50
|
return
|
|
@@ -66,10 +71,10 @@ class Exify: NSObject {
|
|
|
66
71
|
request.addResource(with: .photo, data: data, options: nil)
|
|
67
72
|
request.creationDate = Date()
|
|
68
73
|
|
|
69
|
-
let
|
|
74
|
+
let newAssetId = request.placeholderForCreatedAsset!.localIdentifier
|
|
70
75
|
resolve([
|
|
71
|
-
"uri": "ph://\(
|
|
72
|
-
"assetId":
|
|
76
|
+
"uri": "ph://\(newAssetId)",
|
|
77
|
+
"assetId": newAssetId,
|
|
73
78
|
"tags": getExifTags(from: metadata),
|
|
74
79
|
])
|
|
75
80
|
|
|
@@ -82,7 +87,7 @@ class Exify: NSObject {
|
|
|
82
87
|
}
|
|
83
88
|
}
|
|
84
89
|
|
|
85
|
-
func
|
|
90
|
+
func writeExif(uri: String, tags: [String: Any], resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
86
91
|
guard let url = URL(string: uri) else {
|
|
87
92
|
reject("Error", "Invalid URL", nil)
|
|
88
93
|
return
|
|
@@ -100,7 +105,6 @@ class Exify: NSObject {
|
|
|
100
105
|
|
|
101
106
|
resolve([
|
|
102
107
|
"uri": uri,
|
|
103
|
-
"assetId": nil,
|
|
104
108
|
"tags": getExifTags(from: metadata),
|
|
105
109
|
])
|
|
106
110
|
|
|
@@ -114,18 +118,20 @@ class Exify: NSObject {
|
|
|
114
118
|
@objc(readAsync:withResolver:withRejecter:)
|
|
115
119
|
func readAsync(uri: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
116
120
|
if uri.starts(with: "ph://") {
|
|
117
|
-
|
|
121
|
+
let assetId = String(uri[uri.index(uri.startIndex, offsetBy: 5)...])
|
|
122
|
+
readExif(assetId: assetId, resolve: resolve)
|
|
118
123
|
} else {
|
|
119
|
-
|
|
124
|
+
readExif(uri: uri, resolve: resolve)
|
|
120
125
|
}
|
|
121
126
|
}
|
|
122
127
|
|
|
123
128
|
@objc(writeAsync:withExif:withResolver:withRejecter:)
|
|
124
129
|
func writeAsync(uri: String, tags: [String: Any], resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
125
130
|
if uri.starts(with: "ph://") {
|
|
126
|
-
|
|
131
|
+
let assetId = String(uri[uri.index(uri.startIndex, offsetBy: 5)...])
|
|
132
|
+
writeExif(assetId: assetId, tags: tags, resolve: resolve, reject: reject)
|
|
127
133
|
} else {
|
|
128
|
-
|
|
134
|
+
writeExif(uri: uri, tags: tags, resolve: resolve, reject: reject)
|
|
129
135
|
}
|
|
130
136
|
}
|
|
131
137
|
}
|
package/ios/ExifyUtils.swift
CHANGED
|
@@ -61,17 +61,23 @@ func getExifTags(from metadata: NSDictionary) -> [String: Any] {
|
|
|
61
61
|
return tags as! [String: Any]
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
-
func
|
|
64
|
+
func readExifTags(from url: URL?, completionHandler: ([String: Any]?) -> Void) -> Void {
|
|
65
65
|
guard let url, let sourceImage = CGImageSourceCreateWithURL(url as CFURL, nil),
|
|
66
66
|
let metadataDict = CGImageSourceCopyPropertiesAtIndex(sourceImage, 0, nil) else {
|
|
67
|
-
return
|
|
67
|
+
return
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
|
|
70
|
+
let tags = getExifTags(from: metadataDict)
|
|
71
|
+
completionHandler(tags)
|
|
71
72
|
}
|
|
72
73
|
|
|
73
74
|
func updateMetadata(url: URL, with tags: [String: Any], completionHanlder: (NSDictionary?, Data?) -> Void) -> Void {
|
|
74
|
-
let
|
|
75
|
+
guard let cgImageSource = CGImageSourceCreateWithURL(url as CFURL, nil) else {
|
|
76
|
+
return
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
let metadataDict = CGImageSourceCopyPropertiesAtIndex(cgImageSource, 0, nil) ?? [:] as CFDictionary
|
|
80
|
+
let metadata = NSMutableDictionary(dictionary: metadataDict)
|
|
75
81
|
|
|
76
82
|
// Append additional Exif data
|
|
77
83
|
let exifDict = metadata[kCGImagePropertyExifDictionary as String] as? NSMutableDictionary
|
|
@@ -116,16 +122,14 @@ func updateMetadata(url: URL, with tags: [String: Any], completionHanlder: (NSDi
|
|
|
116
122
|
|
|
117
123
|
let destinationData = NSMutableData()
|
|
118
124
|
|
|
119
|
-
guard let
|
|
120
|
-
let sourceData = uiImage.jpegData(compressionQuality: 1.0) as CFData?,
|
|
121
|
-
let cgImageSource = CGImageSourceCreateWithData(sourceData, nil),
|
|
122
|
-
let sourceType = CGImageSourceGetType(cgImageSource),
|
|
125
|
+
guard let sourceType = CGImageSourceGetType(cgImageSource),
|
|
123
126
|
let destination = CGImageDestinationCreateWithData(destinationData, sourceType, 1, nil) else {
|
|
124
127
|
return
|
|
125
128
|
}
|
|
126
129
|
|
|
127
|
-
|
|
130
|
+
CGImageDestinationAddImageFromSource(destination, cgImageSource, 0, metadata)
|
|
128
131
|
if CGImageDestinationFinalize(destination) {
|
|
129
132
|
completionHanlder(metadata, destinationData as Data)
|
|
130
133
|
}
|
|
131
134
|
}
|
|
135
|
+
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* From Android's ExifInterface Tags
|
|
3
|
+
* Normalized for both IOS and Android
|
|
3
4
|
*/
|
|
4
5
|
export interface ExifTags {
|
|
5
6
|
SensorLeftBorder?: number;
|
|
@@ -146,15 +147,20 @@ export interface ExifTags {
|
|
|
146
147
|
export interface ExifyWriteResult {
|
|
147
148
|
/**
|
|
148
149
|
* The URI of the image that was written.
|
|
149
|
-
* On IOS asset, this will be new URI created.
|
|
150
|
+
* On IOS: If input URI is an asset, this will be new URI created.
|
|
151
|
+
*
|
|
152
|
+
* This will return exactly the same as the input URI if the input URI is from a local file.
|
|
150
153
|
*/
|
|
151
|
-
uri
|
|
154
|
+
uri: string;
|
|
152
155
|
/**
|
|
153
|
-
*
|
|
156
|
+
* A newly created asset ID on IOS.
|
|
157
|
+
* Writing exif metadata into an asset file will create a new asset file.
|
|
158
|
+
*
|
|
159
|
+
* @platform ios
|
|
154
160
|
*/
|
|
155
|
-
assetId?: string
|
|
161
|
+
assetId?: string;
|
|
156
162
|
/**
|
|
157
|
-
*
|
|
163
|
+
* Normalized Exif tags
|
|
158
164
|
*/
|
|
159
165
|
tags?: ExifTags;
|
|
160
166
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lodev09/react-native-exify",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.2",
|
|
4
4
|
"description": "Read and write exif data into an image.",
|
|
5
5
|
"main": "lib/commonjs/index",
|
|
6
6
|
"module": "lib/module/index",
|
|
@@ -94,7 +94,7 @@
|
|
|
94
94
|
"workspaces": [
|
|
95
95
|
"example"
|
|
96
96
|
],
|
|
97
|
-
"packageManager": "yarn@
|
|
97
|
+
"packageManager": "yarn@4.1.1",
|
|
98
98
|
"jest": {
|
|
99
99
|
"preset": "react-native",
|
|
100
100
|
"modulePathIgnorePatterns": [
|
|
@@ -116,7 +116,12 @@
|
|
|
116
116
|
"publish": true
|
|
117
117
|
},
|
|
118
118
|
"github": {
|
|
119
|
-
"release": true
|
|
119
|
+
"release": true,
|
|
120
|
+
"comments": {
|
|
121
|
+
"submit": true,
|
|
122
|
+
"issue": ":rocket: _This issue has been resolved in v${version}. See [${releaseName}](${releaseUrl}) for release notes._",
|
|
123
|
+
"pr": ":rocket: _This pull request is included in v${version}. See [${releaseName}](${releaseUrl}) for release notes._"
|
|
124
|
+
}
|
|
120
125
|
},
|
|
121
126
|
"plugins": {
|
|
122
127
|
"@release-it/conventional-changelog": {
|
package/src/types.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* From Android's ExifInterface Tags
|
|
3
|
+
* Normalized for both IOS and Android
|
|
3
4
|
*/
|
|
4
5
|
export interface ExifTags {
|
|
5
6
|
SensorLeftBorder?: number
|
|
@@ -147,15 +148,20 @@ export interface ExifTags {
|
|
|
147
148
|
export interface ExifyWriteResult {
|
|
148
149
|
/**
|
|
149
150
|
* The URI of the image that was written.
|
|
150
|
-
* On IOS asset, this will be new URI created.
|
|
151
|
+
* On IOS: If input URI is an asset, this will be new URI created.
|
|
152
|
+
*
|
|
153
|
+
* This will return exactly the same as the input URI if the input URI is from a local file.
|
|
151
154
|
*/
|
|
152
|
-
uri
|
|
155
|
+
uri: string
|
|
153
156
|
/**
|
|
154
|
-
*
|
|
157
|
+
* A newly created asset ID on IOS.
|
|
158
|
+
* Writing exif metadata into an asset file will create a new asset file.
|
|
159
|
+
*
|
|
160
|
+
* @platform ios
|
|
155
161
|
*/
|
|
156
|
-
assetId?: string
|
|
162
|
+
assetId?: string
|
|
157
163
|
/**
|
|
158
|
-
*
|
|
164
|
+
* Normalized Exif tags
|
|
159
165
|
*/
|
|
160
166
|
tags?: ExifTags
|
|
161
167
|
}
|