Skip to content

Commit 871ae92

Browse files
author
zhanglong15
committed
Compress the image after edit; Not generate a new image if there is no operation.
1 parent c12f18f commit 871ae92

9 files changed

+65
-8
lines changed

Sources/Exttensions/UIImage+ZLImageEditor.swift renamed to Sources/Extensions/UIImage+ZLImageEditor.swift

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
// THE SOFTWARE.
2626

2727
import UIKit
28+
import Accelerate
2829

2930
extension UIImage {
3031

@@ -152,6 +153,49 @@ extension UIImage {
152153
return temp
153154
}
154155

156+
/// Processing speed is better than resize(:) method
157+
func resize_vI(_ size: CGSize) -> UIImage? {
158+
guard let cgImage = self.cgImage else { return nil }
159+
160+
var format = vImage_CGImageFormat(bitsPerComponent: 8, bitsPerPixel: 32, colorSpace: nil,
161+
bitmapInfo: CGBitmapInfo(rawValue: CGImageAlphaInfo.first.rawValue),
162+
version: 0, decode: nil, renderingIntent: .defaultIntent)
163+
164+
var sourceBuffer = vImage_Buffer()
165+
defer {
166+
if #available(iOS 13.0, *) {
167+
sourceBuffer.free()
168+
} else {
169+
sourceBuffer.data.deallocate()
170+
}
171+
}
172+
173+
var error = vImageBuffer_InitWithCGImage(&sourceBuffer, &format, nil, cgImage, numericCast(kvImageNoFlags))
174+
guard error == kvImageNoError else { return nil }
175+
176+
let destWidth = Int(size.width)
177+
let destHeight = Int(size.height)
178+
let bytesPerPixel = cgImage.bitsPerPixel / 8
179+
let destBytesPerRow = destWidth * bytesPerPixel
180+
181+
let destData = UnsafeMutablePointer<UInt8>.allocate(capacity: destHeight * destBytesPerRow)
182+
defer {
183+
destData.deallocate()
184+
}
185+
var destBuffer = vImage_Buffer(data: destData, height: vImagePixelCount(destHeight), width: vImagePixelCount(destWidth), rowBytes: destBytesPerRow)
186+
187+
// scale the image
188+
error = vImageScale_ARGB8888(&sourceBuffer, &destBuffer, nil, numericCast(kvImageHighQualityResampling))
189+
guard error == kvImageNoError else { return nil }
190+
191+
// create a CGImage from vImage_Buffer
192+
guard let destCGImage = vImageCreateCGImageFromBuffer(&destBuffer, &format, nil, nil, numericCast(kvImageNoFlags), &error)?.takeRetainedValue() else { return nil }
193+
guard error == kvImageNoError else { return nil }
194+
195+
// create a UIImage
196+
return UIImage(cgImage: destCGImage, scale: self.scale, orientation: self.imageOrientation)
197+
}
198+
155199
func toCIImage() -> CIImage? {
156200
var ci = self.ciImage
157201
if ci == nil, let cg = self.cgImage {

Sources/General/ZLEditImageViewController.swift

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -668,9 +668,22 @@ public class ZLEditImageViewController: UIViewController {
668668
}
669669
}
670670

671-
var image = self.buildImage()
672-
image = image.clipImage(self.angle, self.editRect) ?? image
673-
self.editFinishBlock?(image, ZLEditImageModel(drawPaths: self.drawPaths, mosaicPaths: self.mosaicPaths, editRect: self.editRect, angle: self.angle, selectRatio: self.selectRatio, selectFilter: self.currentFilter, textStickers: textStickers, imageStickers: imageStickers))
671+
var hasEdit = true
672+
if self.drawPaths.isEmpty, self.editRect.size == self.imageSize, self.angle == 0, self.mosaicPaths.isEmpty, imageStickers.isEmpty, textStickers.isEmpty, self.currentFilter.applier == nil {
673+
hasEdit = false
674+
}
675+
676+
var resImage = self.originalImage
677+
let editModel = ZLEditImageModel(drawPaths: self.drawPaths, mosaicPaths: self.mosaicPaths, editRect: self.editRect, angle: self.angle, selectRatio: self.selectRatio, selectFilter: self.currentFilter, textStickers: textStickers, imageStickers: imageStickers)
678+
if hasEdit {
679+
resImage = self.buildImage()
680+
resImage = resImage.clipImage(self.angle, self.editRect) ?? resImage
681+
if let resizeImage = resImage.resize_vI(CGSize(width: resImage.size.width / 2, height: resImage.size.height / 2)) {
682+
resImage = resizeImage
683+
}
684+
}
685+
self.editFinishBlock?(resImage, editModel)
686+
674687
self.dismiss(animated: self.animateDismiss, completion: nil)
675688
}
676689

ZLImageEditor.podspec

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Pod::Spec.new do |s|
22
s.name = 'ZLImageEditor'
3-
s.version = '1.0.1'
3+
s.version = '1.0.2'
44
s.summary = 'A powerful image editor framework. Supports graffiti, cropping, mosaic, text stickers, picture stickers, filters.'
55

66
s.homepage = 'https://github.com/longitachi/ZLImageEditor'
@@ -14,7 +14,7 @@ Pod::Spec.new do |s|
1414
s.swift_versions = ['5.0', '5.1', '5.2']
1515

1616
s.requires_arc = true
17-
s.frameworks = 'UIKit'
17+
s.frameworks = 'UIKit', 'Accelerate'
1818

1919
s.resources = 'Sources/*.{png,bundle}'
2020

ZLImageEditor.xcodeproj/project.pbxproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@
8383
E40208DA256B9BA60077F5DC /* ZLImageEditor.h */,
8484
E4020904256BA0390077F5DC /* ZLImageEditor.bundle */,
8585
E4020902256BA00D0077F5DC /* General */,
86-
E4020903256BA01F0077F5DC /* Exttensions */,
86+
E4020903256BA01F0077F5DC /* Extensions */,
8787
E40208DB256B9BA60077F5DC /* Info.plist */,
8888
);
8989
path = Sources;
@@ -106,7 +106,7 @@
106106
path = General;
107107
sourceTree = "<group>";
108108
};
109-
E4020903256BA01F0077F5DC /* Exttensions */ = {
109+
E4020903256BA01F0077F5DC /* Extensions */ = {
110110
isa = PBXGroup;
111111
children = (
112112
E4020917256BA6840077F5DC /* UIControl+ZLImageEditor.swift */,
@@ -116,7 +116,7 @@
116116
E40208FA256BA0080077F5DC /* String+ZLImageEditor.swift */,
117117
E40208F9256BA0070077F5DC /* UIImage+ZLImageEditor.swift */,
118118
);
119-
path = Exttensions;
119+
path = Extensions;
120120
sourceTree = "<group>";
121121
};
122122
/* End PBXGroup section */

0 commit comments

Comments
 (0)