react-native-photo-video-editor 0.1.0 → 0.1.1
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/CHANGELOG.md +9 -0
- package/PhotoVideoEditor.podspec +1 -0
- package/README.md +10 -6
- package/THIRD_PARTY_NOTICES.md +20 -0
- package/android/build.gradle +1 -1
- package/android/src/main/AndroidManifest.xml +1 -1
- package/android/src/main/assets/Stickers/AUTUMN_1.png +0 -0
- package/android/src/main/assets/Stickers/AUTUMN_10.png +0 -0
- package/android/src/main/assets/Stickers/AUTUMN_11.png +0 -0
- package/android/src/main/assets/Stickers/AUTUMN_12.png +0 -0
- package/android/src/main/assets/Stickers/AUTUMN_13.png +0 -0
- package/android/src/main/assets/Stickers/AUTUMN_14.png +0 -0
- package/android/src/main/assets/Stickers/AUTUMN_15.png +0 -0
- package/android/src/main/assets/Stickers/AUTUMN_16.png +0 -0
- package/android/src/main/assets/Stickers/AUTUMN_17.png +0 -0
- package/android/src/main/assets/Stickers/AUTUMN_18.png +0 -0
- package/android/src/main/assets/Stickers/AUTUMN_2.png +0 -0
- package/android/src/main/assets/Stickers/AUTUMN_3.png +0 -0
- package/android/src/main/assets/Stickers/AUTUMN_4.png +0 -0
- package/android/src/main/assets/Stickers/AUTUMN_5.png +0 -0
- package/android/src/main/assets/Stickers/AUTUMN_6.png +0 -0
- package/android/src/main/assets/Stickers/AUTUMN_7.png +0 -0
- package/android/src/main/assets/Stickers/AUTUMN_8.png +0 -0
- package/android/src/main/assets/Stickers/AUTUMN_9.png +0 -0
- package/android/src/main/assets/Stickers/LOL_1.png +0 -0
- package/android/src/main/assets/Stickers/LOL_10.png +0 -0
- package/android/src/main/assets/Stickers/LOL_11.png +0 -0
- package/android/src/main/assets/Stickers/LOL_12.png +0 -0
- package/android/src/main/assets/Stickers/LOL_13.png +0 -0
- package/android/src/main/assets/Stickers/LOL_14.png +0 -0
- package/android/src/main/assets/Stickers/LOL_15.png +0 -0
- package/android/src/main/assets/Stickers/LOL_16.png +0 -0
- package/android/src/main/assets/Stickers/LOL_17.png +0 -0
- package/android/src/main/assets/Stickers/LOL_18.png +0 -0
- package/android/src/main/assets/Stickers/LOL_19.png +0 -0
- package/android/src/main/assets/Stickers/LOL_2.png +0 -0
- package/android/src/main/assets/Stickers/LOL_3.png +0 -0
- package/android/src/main/assets/Stickers/LOL_4.png +0 -0
- package/android/src/main/assets/Stickers/LOL_5.png +0 -0
- package/android/src/main/assets/Stickers/LOL_6.png +0 -0
- package/android/src/main/assets/Stickers/LOL_7.png +0 -0
- package/android/src/main/assets/Stickers/LOL_8.png +0 -0
- package/android/src/main/assets/Stickers/LOL_9.png +0 -0
- package/android/src/main/assets/Stickers/SPRING_1.png +0 -0
- package/android/src/main/assets/Stickers/SPRING_2.png +0 -0
- package/android/src/main/assets/Stickers/SPRING_3.png +0 -0
- package/android/src/main/assets/Stickers/SPRING_4.png +0 -0
- package/android/src/main/assets/Stickers/SPRING_5.png +0 -0
- package/android/src/main/assets/Stickers/SPRING_6.png +0 -0
- package/android/src/main/assets/Stickers/SUMMER_1.png +0 -0
- package/android/src/main/assets/Stickers/SUMMER_10.png +0 -0
- package/android/src/main/assets/Stickers/SUMMER_11.png +0 -0
- package/android/src/main/assets/Stickers/SUMMER_12.png +0 -0
- package/android/src/main/assets/Stickers/SUMMER_13.png +0 -0
- package/android/src/main/assets/Stickers/SUMMER_14.png +0 -0
- package/android/src/main/assets/Stickers/SUMMER_15.png +0 -0
- package/android/src/main/assets/Stickers/SUMMER_16.png +0 -0
- package/android/src/main/assets/Stickers/SUMMER_17.png +0 -0
- package/android/src/main/assets/Stickers/SUMMER_18.png +0 -0
- package/android/src/main/assets/Stickers/SUMMER_19.png +0 -0
- package/android/src/main/assets/Stickers/SUMMER_2.png +0 -0
- package/android/src/main/assets/Stickers/SUMMER_20.png +0 -0
- package/android/src/main/assets/Stickers/SUMMER_21.png +0 -0
- package/android/src/main/assets/Stickers/SUMMER_3.png +0 -0
- package/android/src/main/assets/Stickers/SUMMER_4.png +0 -0
- package/android/src/main/assets/Stickers/SUMMER_5.png +0 -0
- package/android/src/main/assets/Stickers/SUMMER_6.png +0 -0
- package/android/src/main/assets/Stickers/SUMMER_7.png +0 -0
- package/android/src/main/assets/Stickers/SUMMER_8.png +0 -0
- package/android/src/main/assets/Stickers/SUMMER_9.png +0 -0
- package/android/src/main/assets/Stickers/TEXT_1.png +0 -0
- package/android/src/main/assets/Stickers/TEXT_12.png +0 -0
- package/android/src/main/assets/Stickers/TEXT_13.png +0 -0
- package/android/src/main/assets/Stickers/TEXT_14.png +0 -0
- package/android/src/main/assets/Stickers/TEXT_15.png +0 -0
- package/android/src/main/assets/Stickers/TEXT_16.png +0 -0
- package/android/src/main/assets/Stickers/TEXT_2.png +0 -0
- package/android/src/main/assets/Stickers/TEXT_25.png +0 -0
- package/android/src/main/assets/Stickers/TEXT_26.png +0 -0
- package/android/src/main/assets/Stickers/TEXT_27.png +0 -0
- package/android/src/main/assets/Stickers/TEXT_28.png +0 -0
- package/android/src/main/assets/Stickers/TEXT_29.png +0 -0
- package/android/src/main/assets/Stickers/TEXT_3.png +0 -0
- package/android/src/main/assets/Stickers/TEXT_30.png +0 -0
- package/android/src/main/assets/Stickers/TEXT_31.png +0 -0
- package/android/src/main/assets/Stickers/TEXT_32.png +0 -0
- package/android/src/main/assets/Stickers/TEXT_7.png +0 -0
- package/android/src/main/assets/Stickers/TEXT_8.png +0 -0
- package/android/src/main/assets/Stickers/TEXT_9.png +0 -0
- package/android/src/main/java/com/photovideoeditor/editor/PhotoVideoEditorActivity.kt +188 -108
- package/android/src/main/java/com/photovideoeditor/photo/render/PhotoLayer.kt +5 -1
- package/android/src/main/java/com/photovideoeditor/photo/render/PhotoLayerRenderer.kt +21 -0
- package/android/src/main/java/com/photovideoeditor/photo/ui/CropOverlayView.kt +34 -2
- package/android/src/main/java/com/photovideoeditor/photo/ui/DrawOverlayView.kt +66 -0
- package/android/src/main/java/com/photovideoeditor/photo/ui/LayerOverlayView.kt +21 -1
- package/android/src/main/java/com/photovideoeditor/stickers/OnlineStickerSheet.kt +135 -104
- package/android/src/main/res/drawable/ic_draw.xml +6 -0
- package/android/src/main/res/drawable/ic_pause.xml +7 -0
- package/android/src/main/res/drawable/ic_play.xml +7 -0
- package/docs/api.md +1 -1
- package/docs/photo-editor.md +5 -6
- package/ios/Editor/PhotoVideoEditorViewController.swift +166 -77
- package/ios/Photo/Rendering/PhotoLayer.swift +5 -1
- package/ios/Photo/Rendering/PhotoLayerRenderer.swift +14 -0
- package/ios/Photo/UI/CropOverlayView.swift +38 -1
- package/ios/Photo/UI/DrawOverlayView.swift +48 -0
- package/ios/Photo/UI/LayerOverlayView.swift +9 -1
- package/ios/Resources/Stickers/AUTUMN_1.png +0 -0
- package/ios/Resources/Stickers/AUTUMN_10.png +0 -0
- package/ios/Resources/Stickers/AUTUMN_11.png +0 -0
- package/ios/Resources/Stickers/AUTUMN_12.png +0 -0
- package/ios/Resources/Stickers/AUTUMN_13.png +0 -0
- package/ios/Resources/Stickers/AUTUMN_14.png +0 -0
- package/ios/Resources/Stickers/AUTUMN_15.png +0 -0
- package/ios/Resources/Stickers/AUTUMN_16.png +0 -0
- package/ios/Resources/Stickers/AUTUMN_17.png +0 -0
- package/ios/Resources/Stickers/AUTUMN_18.png +0 -0
- package/ios/Resources/Stickers/AUTUMN_2.png +0 -0
- package/ios/Resources/Stickers/AUTUMN_3.png +0 -0
- package/ios/Resources/Stickers/AUTUMN_4.png +0 -0
- package/ios/Resources/Stickers/AUTUMN_5.png +0 -0
- package/ios/Resources/Stickers/AUTUMN_6.png +0 -0
- package/ios/Resources/Stickers/AUTUMN_7.png +0 -0
- package/ios/Resources/Stickers/AUTUMN_8.png +0 -0
- package/ios/Resources/Stickers/AUTUMN_9.png +0 -0
- package/ios/Resources/Stickers/LOL_1.png +0 -0
- package/ios/Resources/Stickers/LOL_10.png +0 -0
- package/ios/Resources/Stickers/LOL_11.png +0 -0
- package/ios/Resources/Stickers/LOL_12.png +0 -0
- package/ios/Resources/Stickers/LOL_13.png +0 -0
- package/ios/Resources/Stickers/LOL_14.png +0 -0
- package/ios/Resources/Stickers/LOL_15.png +0 -0
- package/ios/Resources/Stickers/LOL_16.png +0 -0
- package/ios/Resources/Stickers/LOL_17.png +0 -0
- package/ios/Resources/Stickers/LOL_18.png +0 -0
- package/ios/Resources/Stickers/LOL_19.png +0 -0
- package/ios/Resources/Stickers/LOL_2.png +0 -0
- package/ios/Resources/Stickers/LOL_3.png +0 -0
- package/ios/Resources/Stickers/LOL_4.png +0 -0
- package/ios/Resources/Stickers/LOL_5.png +0 -0
- package/ios/Resources/Stickers/LOL_6.png +0 -0
- package/ios/Resources/Stickers/LOL_7.png +0 -0
- package/ios/Resources/Stickers/LOL_8.png +0 -0
- package/ios/Resources/Stickers/LOL_9.png +0 -0
- package/ios/Resources/Stickers/SPRING_1.png +0 -0
- package/ios/Resources/Stickers/SPRING_2.png +0 -0
- package/ios/Resources/Stickers/SPRING_3.png +0 -0
- package/ios/Resources/Stickers/SPRING_4.png +0 -0
- package/ios/Resources/Stickers/SPRING_5.png +0 -0
- package/ios/Resources/Stickers/SPRING_6.png +0 -0
- package/ios/Resources/Stickers/SUMMER_1.png +0 -0
- package/ios/Resources/Stickers/SUMMER_10.png +0 -0
- package/ios/Resources/Stickers/SUMMER_11.png +0 -0
- package/ios/Resources/Stickers/SUMMER_12.png +0 -0
- package/ios/Resources/Stickers/SUMMER_13.png +0 -0
- package/ios/Resources/Stickers/SUMMER_14.png +0 -0
- package/ios/Resources/Stickers/SUMMER_15.png +0 -0
- package/ios/Resources/Stickers/SUMMER_16.png +0 -0
- package/ios/Resources/Stickers/SUMMER_17.png +0 -0
- package/ios/Resources/Stickers/SUMMER_18.png +0 -0
- package/ios/Resources/Stickers/SUMMER_19.png +0 -0
- package/ios/Resources/Stickers/SUMMER_2.png +0 -0
- package/ios/Resources/Stickers/SUMMER_20.png +0 -0
- package/ios/Resources/Stickers/SUMMER_21.png +0 -0
- package/ios/Resources/Stickers/SUMMER_3.png +0 -0
- package/ios/Resources/Stickers/SUMMER_4.png +0 -0
- package/ios/Resources/Stickers/SUMMER_5.png +0 -0
- package/ios/Resources/Stickers/SUMMER_6.png +0 -0
- package/ios/Resources/Stickers/SUMMER_7.png +0 -0
- package/ios/Resources/Stickers/SUMMER_8.png +0 -0
- package/ios/Resources/Stickers/SUMMER_9.png +0 -0
- package/ios/Resources/Stickers/TEXT_1.png +0 -0
- package/ios/Resources/Stickers/TEXT_12.png +0 -0
- package/ios/Resources/Stickers/TEXT_13.png +0 -0
- package/ios/Resources/Stickers/TEXT_14.png +0 -0
- package/ios/Resources/Stickers/TEXT_15.png +0 -0
- package/ios/Resources/Stickers/TEXT_16.png +0 -0
- package/ios/Resources/Stickers/TEXT_2.png +0 -0
- package/ios/Resources/Stickers/TEXT_25.png +0 -0
- package/ios/Resources/Stickers/TEXT_26.png +0 -0
- package/ios/Resources/Stickers/TEXT_27.png +0 -0
- package/ios/Resources/Stickers/TEXT_28.png +0 -0
- package/ios/Resources/Stickers/TEXT_29.png +0 -0
- package/ios/Resources/Stickers/TEXT_3.png +0 -0
- package/ios/Resources/Stickers/TEXT_30.png +0 -0
- package/ios/Resources/Stickers/TEXT_31.png +0 -0
- package/ios/Resources/Stickers/TEXT_32.png +0 -0
- package/ios/Resources/Stickers/TEXT_7.png +0 -0
- package/ios/Resources/Stickers/TEXT_8.png +0 -0
- package/ios/Resources/Stickers/TEXT_9.png +0 -0
- package/ios/Resources/Stickers/a_pety_icon.png +0 -0
- package/ios/Stickers/OnlineStickerSheetViewController.swift +102 -159
- package/lib/module/index.js +2 -2
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/src/types.d.ts +2 -2
- package/lib/typescript/src/types.d.ts.map +1 -1
- package/package.json +2 -1
- package/src/index.ts +1 -1
- package/src/types.ts +2 -2
- package/android/src/main/java/com/photovideoeditor/stickers/OpenMojiCatalog.kt +0 -172
- package/android/src/main/java/com/photovideoeditor/stickers/RemoteImageLoader.kt +0 -110
- package/ios/Stickers/OpenMojiCatalog.swift +0 -188
- package/ios/Stickers/RemoteImageLoader.swift +0 -127
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
import UIKit
|
|
2
|
-
|
|
3
|
-
/// Small async image loader for the online-sticker sheet: in-memory + on-disk thumbnail cache,
|
|
4
|
-
/// plus a full-res "download and hand me a local file" path for the sticker that actually gets
|
|
5
|
-
/// inserted as a layer. Plain `URLSession`, no third-party dependency (matches the rest of the
|
|
6
|
-
/// codebase's zero-networking-dependency policy).
|
|
7
|
-
final class RemoteImageLoader {
|
|
8
|
-
static let shared = RemoteImageLoader()
|
|
9
|
-
|
|
10
|
-
private let memoryCache = NSCache<NSString, UIImage>()
|
|
11
|
-
private let ioQueue = DispatchQueue(label: "com.photovideoeditor.remoteimageloader.io", qos: .userInitiated)
|
|
12
|
-
private let session = URLSession.shared
|
|
13
|
-
|
|
14
|
-
private init() {
|
|
15
|
-
memoryCache.countLimit = 500
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
private var diskCacheDirectory: URL? {
|
|
19
|
-
guard let base = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first else { return nil }
|
|
20
|
-
let dir = base.appendingPathComponent("openmoji", isDirectory: true)
|
|
21
|
-
if !FileManager.default.fileExists(atPath: dir.path) {
|
|
22
|
-
try? FileManager.default.createDirectory(at: dir, withIntermediateDirectories: true)
|
|
23
|
-
}
|
|
24
|
-
return dir
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
private func diskCacheFile(forKey key: String) -> URL? {
|
|
28
|
-
diskCacheDirectory?.appendingPathComponent(key)
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
// MARK: - Thumbnails (UICollectionViewCell-safe)
|
|
32
|
-
|
|
33
|
-
/// Loads a thumbnail into `imageView`, guarding against cell reuse: the URL being loaded is
|
|
34
|
-
/// stamped onto the image view via associated object, and the result is only applied if that
|
|
35
|
-
/// stamp still matches once the load completes (standard fix for the "wrong image after scroll"
|
|
36
|
-
/// bug with recycled `UICollectionViewCell`/`UITableViewCell` image views).
|
|
37
|
-
func loadThumbnail(url: URL, into imageView: UIImageView) {
|
|
38
|
-
Self.setLoadTag(url.absoluteString, on: imageView)
|
|
39
|
-
imageView.image = nil
|
|
40
|
-
|
|
41
|
-
let cacheKey = url.absoluteString as NSString
|
|
42
|
-
if let cached = memoryCache.object(forKey: cacheKey) {
|
|
43
|
-
imageView.image = cached
|
|
44
|
-
return
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
let diskKey = "\(url.lastPathComponent)_thumb.png"
|
|
48
|
-
ioQueue.async { [weak self] in
|
|
49
|
-
guard let self else { return }
|
|
50
|
-
if let diskURL = self.diskCacheFile(forKey: diskKey),
|
|
51
|
-
let data = try? Data(contentsOf: diskURL),
|
|
52
|
-
let image = UIImage(data: data) {
|
|
53
|
-
self.memoryCache.setObject(image, forKey: cacheKey)
|
|
54
|
-
DispatchQueue.main.async {
|
|
55
|
-
guard Self.loadTag(on: imageView) == url.absoluteString else { return }
|
|
56
|
-
imageView.image = image
|
|
57
|
-
}
|
|
58
|
-
return
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
self.session.dataTask(with: url) { data, response, _ in
|
|
62
|
-
guard
|
|
63
|
-
let data, let image = UIImage(data: data),
|
|
64
|
-
let http = response as? HTTPURLResponse, (200..<300).contains(http.statusCode)
|
|
65
|
-
else { return }
|
|
66
|
-
self.memoryCache.setObject(image, forKey: cacheKey)
|
|
67
|
-
if let diskURL = self.diskCacheFile(forKey: diskKey) {
|
|
68
|
-
try? data.write(to: diskURL, options: .atomic)
|
|
69
|
-
}
|
|
70
|
-
DispatchQueue.main.async {
|
|
71
|
-
guard Self.loadTag(on: imageView) == url.absoluteString else { return }
|
|
72
|
-
imageView.image = image
|
|
73
|
-
}
|
|
74
|
-
}.resume()
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
// MARK: - Full-res download
|
|
79
|
-
|
|
80
|
-
/// Downloads (or returns the already-cached file for) the full-res sticker image. Completion
|
|
81
|
-
/// always fires on the main thread.
|
|
82
|
-
func downloadFull(url: URL, completion: @escaping (URL?, Error?) -> Void) {
|
|
83
|
-
let diskKey = "\(url.lastPathComponent)_full.png"
|
|
84
|
-
ioQueue.async { [weak self] in
|
|
85
|
-
guard let self else { return }
|
|
86
|
-
if let diskURL = self.diskCacheFile(forKey: diskKey), FileManager.default.fileExists(atPath: diskURL.path) {
|
|
87
|
-
DispatchQueue.main.async { completion(diskURL, nil) }
|
|
88
|
-
return
|
|
89
|
-
}
|
|
90
|
-
self.session.dataTask(with: url) { data, response, error in
|
|
91
|
-
if let error {
|
|
92
|
-
DispatchQueue.main.async { completion(nil, error) }
|
|
93
|
-
return
|
|
94
|
-
}
|
|
95
|
-
guard
|
|
96
|
-
let data,
|
|
97
|
-
let http = response as? HTTPURLResponse, (200..<300).contains(http.statusCode)
|
|
98
|
-
else {
|
|
99
|
-
DispatchQueue.main.async { completion(nil, URLError(.badServerResponse)) }
|
|
100
|
-
return
|
|
101
|
-
}
|
|
102
|
-
guard let diskURL = self.diskCacheFile(forKey: diskKey) else {
|
|
103
|
-
DispatchQueue.main.async { completion(nil, URLError(.cannotCreateFile)) }
|
|
104
|
-
return
|
|
105
|
-
}
|
|
106
|
-
do {
|
|
107
|
-
try data.write(to: diskURL, options: .atomic)
|
|
108
|
-
DispatchQueue.main.async { completion(diskURL, nil) }
|
|
109
|
-
} catch {
|
|
110
|
-
DispatchQueue.main.async { completion(nil, error) }
|
|
111
|
-
}
|
|
112
|
-
}.resume()
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
// MARK: - Cell-reuse tagging
|
|
117
|
-
|
|
118
|
-
private static var loadTagKey: UInt8 = 0
|
|
119
|
-
|
|
120
|
-
private static func setLoadTag(_ tag: String, on imageView: UIImageView) {
|
|
121
|
-
objc_setAssociatedObject(imageView, &loadTagKey, tag, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
private static func loadTag(on imageView: UIImageView) -> String? {
|
|
125
|
-
objc_getAssociatedObject(imageView, &loadTagKey) as? String
|
|
126
|
-
}
|
|
127
|
-
}
|