diff --git a/example/pubspec.lock b/example/pubspec.lock index a5e305a..bc31632 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -283,18 +283,18 @@ packages: dependency: transitive description: name: leak_tracker - sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05" url: "https://pub.dev" source: hosted - version: "10.0.4" + version: "10.0.5" leak_tracker_flutter_testing: dependency: transitive description: name: leak_tracker_flutter_testing - sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806" url: "https://pub.dev" source: hosted - version: "3.0.3" + version: "3.0.5" leak_tracker_testing: dependency: transitive description: @@ -323,18 +323,18 @@ packages: dependency: transitive description: name: material_color_utilities - sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" + sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec url: "https://pub.dev" source: hosted - version: "0.8.0" + version: "0.11.1" meta: dependency: transitive description: name: meta - sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" + sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7 url: "https://pub.dev" source: hosted - version: "1.12.0" + version: "1.15.0" mime: dependency: transitive description: @@ -411,10 +411,10 @@ packages: dependency: transitive description: name: platform - sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec" + sha256: "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65" url: "https://pub.dev" source: hosted - version: "3.1.4" + version: "3.1.5" plugin_platform_interface: dependency: transitive description: @@ -496,10 +496,10 @@ packages: dependency: transitive description: name: test_api - sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" + sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb" url: "https://pub.dev" source: hosted - version: "0.7.0" + version: "0.7.2" typed_data: dependency: transitive description: @@ -520,17 +520,17 @@ packages: dependency: transitive description: name: vm_service - sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" + sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d" url: "https://pub.dev" source: hosted - version: "14.2.1" + version: "14.2.5" watermark_unique: dependency: "direct main" description: path: ".." relative: true source: path - version: "1.0.7" + version: "1.0.8" web: dependency: transitive description: diff --git a/ios/Classes/WatermarkUniquePlugin.swift b/ios/Classes/WatermarkUniquePlugin.swift index dca7013..2ef4fd1 100644 --- a/ios/Classes/WatermarkUniquePlugin.swift +++ b/ios/Classes/WatermarkUniquePlugin.swift @@ -125,9 +125,9 @@ public class WatermarkUniquePlugin: NSObject, FlutterPlugin { } DispatchQueue.global().async { - UIGraphicsBeginImageContextWithOptions(image.size, false, 0.0) + UIGraphicsBeginImageContextWithOptions(image.size, false, image.scale) - image.draw(at: .zero) + image.draw(in: CGRect(origin: .zero, size: image.size)) let textFont = UIFont.systemFont(ofSize: textWatermarkSize) let textAttributes: [NSAttributedString.Key: Any] = [ @@ -174,11 +174,11 @@ public class WatermarkUniquePlugin: NSObject, FlutterPlugin { bottom: -(backgroundTextPaddingBottom ?? 0), right: -(backgroundTextPaddingRight ?? 0))) - backgroundRect = backgroundRect.intersection(CGRect(x: x, y: y, width: image.size.width, height: image.size.height)) + backgroundRect = backgroundRect.intersection(CGRect(x: x-(backgroundTextPaddingTop ?? 0), y: y-(backgroundTextPaddingTop ?? 0), width: image.size.width, height: image.size.height)) if let backgroundColor = backgroundTextColor { backgroundColor.setFill() - UIRectFill(backgroundRect) + UIRectFillUsingBlendMode(backgroundRect, .normal) } line.draw(in: textRect, withAttributes: textAttributes) @@ -186,7 +186,8 @@ public class WatermarkUniquePlugin: NSObject, FlutterPlugin { currentY += textSize.height } - guard let newImage = UIGraphicsGetImageFromCurrentImageContext() else { + guard let newImage = UIGraphicsGetImageFromCurrentImageContext(), + let compressedData = newImage.jpegData(compressionQuality: (quality / 100)) else { UIGraphicsEndImageContext() completion(nil, NSError(domain: "ImageProcessorErrorDomain", code: -1, userInfo: [NSLocalizedDescriptionKey: "Failed to create new image"])) return @@ -194,16 +195,12 @@ public class WatermarkUniquePlugin: NSObject, FlutterPlugin { UIGraphicsEndImageContext() - guard let data = newImage.jpegData(compressionQuality: (quality / 100)) ?? newImage.pngData() else { - completion(nil, NSError(domain: "ImageProcessorErrorDomain", code: -1, userInfo: [NSLocalizedDescriptionKey: "Failed to convert image data"])) - return - } - - let fileManager = FileManager.default let newFilePath = (filePath as NSString).deletingLastPathComponent + "/\(UUID().uuidString).\(imageFormat)" - if fileManager.createFile(atPath: newFilePath, contents: data, attributes: nil) { + + do { + try compressedData.write(to: URL(fileURLWithPath: newFilePath), options: .atomic) completion(newFilePath, nil) - } else { + } catch { completion(nil, NSError(domain: "ImageProcessorErrorDomain", code: -1, userInfo: [NSLocalizedDescriptionKey: "Failed to save image"])) } } @@ -221,7 +218,7 @@ public class WatermarkUniquePlugin: NSObject, FlutterPlugin { guard let image = UIImage(contentsOfFile: filePath), let watermarkImage = UIImage(contentsOfFile: watermarkImagePath) else { - completion(nil, NSError(domain: "READ_ERROR", code: -1, userInfo: [NSLocalizedDescriptionKey: "Ошибка чтения файла изображения"])) + completion(nil, NSError(domain: "READ_ERROR", code: -1, userInfo: [NSLocalizedDescriptionKey: "Failed to create new image"])) return } @@ -233,7 +230,8 @@ public class WatermarkUniquePlugin: NSObject, FlutterPlugin { guard let newImage = UIGraphicsGetImageFromCurrentImageContext(), let compressedData = newImage.jpegData(compressionQuality: (quality / 100)) else { - completion(nil, NSError(domain: "CONVERSION_ERROR", code: -1, userInfo: [NSLocalizedDescriptionKey: "Ошибка преобразования данных изображения"])) + UIGraphicsEndImageContext() + completion(nil, NSError(domain: "CONVERSION_ERROR", code: -1, userInfo: [NSLocalizedDescriptionKey: "Failed to create new image"])) return } @@ -245,7 +243,7 @@ public class WatermarkUniquePlugin: NSObject, FlutterPlugin { try compressedData.write(to: URL(fileURLWithPath: newFilePath), options: .atomic) completion(newFilePath, nil) } catch { - completion(nil, NSError(domain: "ImageProcessorErrorDomain", code: -1, userInfo: [NSLocalizedDescriptionKey: "Ошибка сохранения изображения"])) + completion(nil, NSError(domain: "ImageProcessorErrorDomain", code: -1, userInfo: [NSLocalizedDescriptionKey: "Failed to save image"])) } } }