Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 24 additions & 14 deletions ios/RCTImageMarker/ImageMarker.swift
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,12 @@ public final class ImageMarker: NSObject, RCTBridgeModule {
continuation.resume(throwing: error)
}
} else {
let request = RCTConvert.nsurlRequest(img.src)
imageLoader.loadImage(with: request!, size: CGSizeMake(img.rnSrc.width, img.rnSrc.height), scale: img.rnSrc.scale, clipped: false, resizeMode: RCTResizeMode.cover) { progress, total in
guard let request = RCTConvert.nsurlRequest(img.src) else {
let error = NSError(domain: ErrorDomainEnum.BASE.rawValue, code: 3, userInfo: [NSLocalizedDescriptionKey: "Failed to create URL request for image: \(img.uri)"])
continuation.resume(throwing: error)
return
}
imageLoader.loadImage(with: request, size: CGSizeMake(img.rnSrc.width, img.rnSrc.height), scale: img.rnSrc.scale, clipped: false, resizeMode: RCTResizeMode.cover) { progress, total in
print("Loading image: \(img.uri) progress: \(progress) total\(total)")
} partialLoad: { loadedImage in
//
Expand Down Expand Up @@ -383,15 +387,18 @@ public final class ImageMarker: NSObject, RCTBridgeModule {

@objc(markWithText:resolver:rejecter:)
func mark(withText opts: [AnyHashable: Any], resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) -> Void {
let markOpts = MarkTextOptions.checkTextParams(opts, rejecter: rejecter)
if markOpts === nil {
guard let markOpts = MarkTextOptions.checkTextParams(opts, rejecter: rejecter) else {
rejecter(ErrorDomainEnum.PARAMS_INVALID.rawValue, "opts invalid", nil)
return
}
Task(priority: .userInitiated) {
do {
let images = try await loadImages(with: [(markOpts?.backgroundImage)!])
let scaledImage = self.markImgWithText(images[0], markOpts!)
let res = self.saveImageForMarker(scaledImage!, with: markOpts!)
let images = try await self.loadImages(with: [markOpts.backgroundImage])
guard let scaledImage = self.markImgWithText(images[0], markOpts) else {
rejecter("error", "Failed to render watermarked image", nil)
return
}
let res = self.saveImageForMarker(scaledImage, with: markOpts)
resolver(res)
print("Loaded images: \(images)")
} catch {
Expand All @@ -403,18 +410,21 @@ public final class ImageMarker: NSObject, RCTBridgeModule {

@objc(markWithImage:resolver:rejecter:)
func mark(withImage opts: [AnyHashable: Any], resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) -> Void {
let markOpts = MarkImageOptions.checkImageParams(opts, rejecter: rejecter)
if markOpts === nil {
guard let markOpts = MarkImageOptions.checkImageParams(opts, rejecter: rejecter) else {
rejecter(ErrorDomainEnum.PARAMS_INVALID.rawValue, "opts invalid", nil)
return
}
Task(priority: .userInitiated) {
do {
let waterImages = markOpts?.watermarkImages.map { $0.imageOption }
var images = try await loadImages(with: [(markOpts?.backgroundImage)!] + waterImages!)
let scaledImage = self.markImage(with: images.remove(at: 0), waterImages: images, options: markOpts!)
let res = self.saveImageForMarker(scaledImage!, with: markOpts!)
let waterImages = markOpts.watermarkImages.map { $0.imageOption }
var images = try await self.loadImages(with: [markOpts.backgroundImage] + waterImages)
guard let scaledImage = self.markImage(with: images.remove(at: 0), waterImages: images, options: markOpts) else {
rejecter("error", "Failed to render watermarked image", nil)
return
}
let res = self.saveImageForMarker(scaledImage, with: markOpts)
resolver(res)
print("Loaded images: \(images), waterImages: \(String(describing: waterImages))")
print("Loaded images: \(images), waterImages: \(waterImages)")
} catch {
print("Failed to load images, error: \(error).")
rejecter("error", error.localizedDescription, error)
Expand Down