-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Loading status checks…
Merge pull request #1 from nathangabriel27/ios-config
Ios config
Showing
7 changed files
with
1,386 additions
and
13 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
export NODE_BINARY=/Users/nathanoliveiradev/.nvm/versions/node/v18.20.2/bin/node |
Large diffs are not rendered by default.
Oops, something went wrong.
10 changes: 10 additions & 0 deletions
10
example/ios/RnImageFilterConvertExample.xcworkspace/contents.xcworkspacedata
Oops, something went wrong.
8 changes: 8 additions & 0 deletions
8
example/ios/RnImageFilterConvertExample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
<plist version="1.0"> | ||
<dict> | ||
<key>IDEDidComputeMac32BitWarning</key> | ||
<true/> | ||
</dict> | ||
</plist> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,8 +1,74 @@ | ||
@objc(RnImageFilterConvert) | ||
class RnImageFilterConvert: NSObject { | ||
@objc | ||
static func requiresMainQueueSetup() -> Bool { | ||
return false | ||
} | ||
|
||
@objc | ||
func FilterSimple(_ filterProps: NSDictionary, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) { | ||
guard let base64 = filterProps["data"] as? String, let filter = filterProps["filter"] as? String else { | ||
reject("ERROR", "Invalid parameters", nil) | ||
return | ||
} | ||
|
||
guard let image = decodeBase64ToImage(base64) else { | ||
reject("ERROR", "Invalid base64 string", nil) | ||
return | ||
} | ||
|
||
var filteredImage: UIImage | ||
|
||
switch filter { | ||
case "blackAndWhite": | ||
filteredImage = applyBlackAndWhiteFilter(image: image) | ||
case "shadesGray": | ||
filteredImage = applyGrayscaleFilter(image: image) | ||
default: | ||
reject("ERROR", "Invalid filter type", nil) | ||
return | ||
} | ||
|
||
let base64String = encodeImageToBase64(image: filteredImage) | ||
let response: [String: Any] = [ | ||
"uri": base64String, | ||
"filter": filter, | ||
"type": "base64", | ||
"status": [ | ||
"status": "success", | ||
"message": NSNull() | ||
] | ||
] | ||
resolve(response) | ||
} | ||
|
||
private func decodeBase64ToImage(_ base64: String) -> UIImage? { | ||
guard let data = Data(base64Encoded: base64) else { return nil } | ||
return UIImage(data: data) | ||
} | ||
|
||
private func encodeImageToBase64(image: UIImage) -> String { | ||
guard let imageData = image.jpegData(compressionQuality: 1.0) else { return "" } | ||
return imageData.base64EncodedString() | ||
} | ||
|
||
private func applyBlackAndWhiteFilter(image: UIImage) -> UIImage { | ||
let context = CIContext(options: nil) | ||
let filter = CIFilter(name: "CIPhotoEffectMono") | ||
let ciImage = CIImage(image: image) | ||
filter?.setValue(ciImage, forKey: kCIInputImageKey) | ||
guard let outputImage = filter?.outputImage else { return image } | ||
guard let cgImage = context.createCGImage(outputImage, from: outputImage.extent) else { return image } | ||
return UIImage(cgImage: cgImage) | ||
} | ||
|
||
@objc(multiply:withB:withResolver:withRejecter:) | ||
func multiply(a: Float, b: Float, resolve:RCTPromiseResolveBlock,reject:RCTPromiseRejectBlock) -> Void { | ||
resolve(a*b) | ||
private func applyGrayscaleFilter(image: UIImage) -> UIImage { | ||
let context = CIContext(options: nil) | ||
let filter = CIFilter(name: "CIPhotoEffectTonal") | ||
let ciImage = CIImage(image: image) | ||
filter?.setValue(ciImage, forKey: kCIInputImageKey) | ||
guard let outputImage = filter?.outputImage else { return image } | ||
guard let cgImage = context.createCGImage(outputImage, from: outputImage.extent) else { return image } | ||
return UIImage(cgImage: cgImage) | ||
} | ||
} |