|
@@ -31,7 +31,6 @@ extension UIImage {
|
|
|
let originRatio = self.size.width / self.size.height
|
|
|
let newRatio = size.width / size.height
|
|
|
var newSize = size
|
|
|
- let cgImage = self.cgImage!
|
|
|
|
|
|
if isAspectRation {
|
|
|
if originRatio < newRatio {
|
|
@@ -43,40 +42,14 @@ extension UIImage {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- var format = vImage_CGImageFormat(bitsPerComponent: 8, bitsPerPixel: 32, colorSpace: nil, bitmapInfo: CGBitmapInfo(rawValue: CGImageAlphaInfo.first.rawValue), version: 0, decode: nil, renderingIntent: CGColorRenderingIntent.defaultIntent)
|
|
|
- var sourceBuffer = vImage_Buffer()
|
|
|
-
|
|
|
- defer {
|
|
|
- free(sourceBuffer.data)
|
|
|
- }
|
|
|
-
|
|
|
- var error = vImageBuffer_InitWithCGImage(&sourceBuffer, &format, nil, cgImage, numericCast(kvImageNoFlags))
|
|
|
- guard error == kvImageNoError else { return nil }
|
|
|
-
|
|
|
- // create a destination buffer
|
|
|
- let destWidth = Int(newSize.width)
|
|
|
- let destHeight = Int(newSize.height)
|
|
|
- let bytesPerPixel = self.cgImage!.bitsPerPixel/8
|
|
|
- let destBytesPerRow = destWidth * bytesPerPixel
|
|
|
- let destData = UnsafeMutablePointer<UInt8>.allocate(capacity: destHeight * destBytesPerRow)
|
|
|
- defer {
|
|
|
- destData.deallocate()
|
|
|
+ UIGraphicsBeginImageContextWithOptions(newSize, false, 1.0)
|
|
|
+ self.draw(in: CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height))
|
|
|
+ let newImage = UIGraphicsGetImageFromCurrentImageContext()
|
|
|
+ UIGraphicsEndImageContext()
|
|
|
+ if let image = newImage {
|
|
|
+ return image
|
|
|
}
|
|
|
- var destBuffer = vImage_Buffer(data: destData, height: vImagePixelCount(destHeight), width: vImagePixelCount(destWidth), rowBytes: destBytesPerRow)
|
|
|
-
|
|
|
- // scale the image
|
|
|
- error = vImageScale_ARGB8888(&sourceBuffer, &destBuffer, nil, numericCast(kvImageHighQualityResampling))
|
|
|
- guard error == kvImageNoError else { return nil }
|
|
|
-
|
|
|
- // create a CGImage from vImage_Buffer
|
|
|
- var destCGImage = vImageCreateCGImageFromBuffer(&destBuffer, &format, nil, nil, numericCast(kvImageNoFlags), &error)?.takeRetainedValue()
|
|
|
- guard error == kvImageNoError else { return nil }
|
|
|
-
|
|
|
- // create a UIImage
|
|
|
- let resizedImage = destCGImage.flatMap { UIImage(cgImage: $0, scale: 0.0, orientation: self.imageOrientation) }
|
|
|
- destCGImage = nil
|
|
|
-
|
|
|
- return resizedImage
|
|
|
+ return self
|
|
|
}
|
|
|
|
|
|
func fixedOrientation() -> UIImage? {
|