Skip to content

Commit 6817004

Browse files
committed
fix: iOS image scale adapt to android
1 parent 7cad876 commit 6817004

File tree

5 files changed

+34
-18
lines changed

5 files changed

+34
-18
lines changed

docs/v1.0.1/interfaces/ImageOptions.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ <h4>Example</h4><pre><code class="language-ts"><span class="hl-9">rotate</span><
7272
<h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagOptional">Optional</code> <span>scale</span><a href="#scale" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3>
7373
<div class="tsd-signature"><span class="tsd-kind-property">scale</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">number</span></div>
7474
<div class="tsd-comment tsd-typography">
75-
<h4>Description</h4><p>image scale <code>0-1</code></p>
75+
<h4>Description</h4><p>image scale <code>>0</code></p>
7676

7777
<h4>Default Value</h4><p>1</p>
7878

example/ios/Podfile.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,7 @@ PODS:
329329
- React-jsinspector (0.71.11)
330330
- React-logger (0.71.11):
331331
- glog
332-
- react-native-image-marker (0.9.1):
332+
- react-native-image-marker (1.0.1):
333333
- React-Core
334334
- react-native-image-picker (5.6.0):
335335
- React-Core
@@ -611,7 +611,7 @@ SPEC CHECKSUMS:
611611
React-jsiexecutor: 18b5b33c5f2687a784a61bc8176611b73524ae77
612612
React-jsinspector: b6ed4cb3ffa27a041cd440300503dc512b761450
613613
React-logger: 186dd536128ae5924bc38ed70932c00aa740cd5b
614-
react-native-image-marker: efeeb67685557d90c946c7f8a4806c7674630986
614+
react-native-image-marker: d827a4eb93416933a83f0b1e32be9aaf1c50633e
615615
react-native-image-picker: db60857e03d63721f19b6f4027de20429ddd9cba
616616
React-perflogger: e706562ab7eb8eb590aa83a224d26fa13963d7f2
617617
React-RCTActionSheet: 57d4bd98122f557479a3359ad5dad8e109e20c5a

example/src/App.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -153,11 +153,11 @@ function ImageOptions(props: {
153153
defaultValue={String(scale)}
154154
onChangeText={(v) => {
155155
const value = Number(v);
156-
if (value < 0 || value > 1) {
156+
if (value < 0) {
157157
Toast.show({
158158
type: 'error',
159159
text1: 'scale range error',
160-
text2: 'scale must be between 0 and 1',
160+
text2: 'scale must greater than or equal to 1',
161161
});
162162
return;
163163
}

ios/RCTImageMarker/ImageMarker.swift

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -86,10 +86,14 @@ public final class ImageMarker: NSObject, RCTBridgeModule {
8686
}
8787

8888
func markerImgWithText(_ image: UIImage, _ opts: MarkTextOptions) -> UIImage? {
89-
let w = Int(image.size.width)
90-
let h = Int(image.size.height)
89+
var bg = image;
90+
if (opts.backgroundImage.scale > 0) {
91+
bg = UIImage(cgImage: image.cgImage!, scale: 1 / opts.backgroundImage.scale, orientation: image.imageOrientation)
92+
}
9193

92-
UIGraphicsBeginImageContextWithOptions(image.size, false, opts.backgroundImage.scale)
94+
let w = Int(bg.size.width)
95+
let h = Int(bg.size.height)
96+
UIGraphicsBeginImageContextWithOptions(bg.size, false, 1 / opts.backgroundImage.scale)
9397

9498
guard let context = UIGraphicsGetCurrentContext() else {
9599
return nil
@@ -105,11 +109,11 @@ public final class ImageMarker: NSObject, RCTBridgeModule {
105109
context.beginTransparencyLayer(auxiliaryInfo: nil)
106110
context.setAlpha(opts.backgroundImage.alpha)
107111
context.setBlendMode(.multiply)
108-
context.draw(image.cgImage!, in: canvasRect)
112+
context.draw(bg.cgImage!, in: canvasRect)
109113
context.endTransparencyLayer()
110114
context.setBlendMode(.normal)
111115
} else {
112-
context.draw(image.cgImage!, in: canvasRect)
116+
context.draw(bg.cgImage!, in: canvasRect)
113117
}
114118
context.restoreGState()
115119

@@ -228,17 +232,29 @@ public final class ImageMarker: NSObject, RCTBridgeModule {
228232
}
229233

230234
func markeImage(with image: UIImage, waterImage: UIImage, options: MarkImageOptions) -> UIImage? {
231-
let w = Int(image.size.width)
232-
let h = Int(image.size.height)
235+
236+
var bg = image;
237+
if (options.backgroundImage.scale > 0) {
238+
bg = UIImage(cgImage: image.cgImage!, scale: 1 / options.backgroundImage.scale, orientation: image.imageOrientation)
239+
}
240+
241+
let w = Int(bg.size.width)
242+
let h = Int(bg.size.height)
243+
UIGraphicsBeginImageContextWithOptions(bg.size, false, 1 / options.backgroundImage.scale)
244+
245+
var marker = waterImage;
246+
if (options.watermarkImage.scale > 0) {
247+
marker = UIImage(cgImage: waterImage.cgImage!, scale: 1 / options.watermarkImage.scale, orientation: waterImage.imageOrientation)
248+
}
233249

234-
let ww = waterImage.size.width * options.watermarkImage.scale
235-
let wh = waterImage.size.height * options.watermarkImage.scale
250+
let ww = marker.size.width
251+
let wh = marker.size.height
236252

237253
let diagonal = sqrt(pow(ww, 2) + pow(ww, 2)) // 计算对角线长度
238254

239255
let canvasRect = CGRect(x: 0, y: 0, width: CGFloat(w), height: CGFloat(h))
240256

241-
UIGraphicsBeginImageContextWithOptions(image.size, false, options.backgroundImage.scale)
257+
UIGraphicsBeginImageContextWithOptions(bg.size, false, options.backgroundImage.scale)
242258

243259
let transform = CGAffineTransform(translationX: 0, y: canvasRect.height)
244260
.scaledBy(x: 1, y: -1)
@@ -253,15 +269,15 @@ public final class ImageMarker: NSObject, RCTBridgeModule {
253269
context?.setAlpha(options.backgroundImage.alpha)
254270
context?.setBlendMode(.multiply)
255271

256-
context?.draw(image.cgImage!, in: canvasRect)
272+
context?.draw(bg.cgImage!, in: canvasRect)
257273
context?.endTransparencyLayer()
258274
context?.setBlendMode(.normal)
259275
context?.restoreGState()
260276
} else {
261277
context = UIGraphicsGetCurrentContext()
262278
context?.saveGState()
263279
context?.concatenate(transform)
264-
context?.draw(image.cgImage!, in: canvasRect)
280+
context?.draw(bg.cgImage!, in: canvasRect)
265281
context?.restoreGState()
266282
}
267283

src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -489,7 +489,7 @@ export interface ImageOptions {
489489
*/
490490
src: any;
491491
/**
492-
* @description image scale `0-1`
492+
* @description image scale `> 0`
493493
* @defaultValue 1
494494
* @example
495495
* scale: 1

0 commit comments

Comments
 (0)