【发布时间】:2019-05-10 18:15:28
【问题描述】:
我创建了一个新文件 UIImage+compress.swift,它与我的 PhotoController.swift 位于同一目录中。我一直在寻找在存储图像之前压缩图像的方法,并找到了解释该过程的以下链接:How to compress of reduce the size of an image before uploading to Parse as PFFile? (Swift)
我尝试直接为图像调用 UIImageJPEGRepresentation ,但这并没有让我到任何地方。尝试公开扩展方法,希望能解决问题,但也没有成功。我试图在 stackOverflow 中寻找类似的问题,但它们的不同之处在于没有人解释为什么该方法不可用。
这是扩展方法的代码:
import UIKit
extension UIImage {
enum JPEGQuality: CGFloat {
case lowest = 0
case low = 0.25
case medium = 0.5
case high = 0.75
case highest = 1
}
/// Returns the data for the specified image in JPEG format.
/// If the image object’s underlying image data has been purged, calling this function forces that data to be reloaded into memory.
/// - returns: A data object containing the JPEG data, or nil if there was a problem generating the data. This function may return nil if the image has no data or if the underlying CGImageRef contains data in an unsupported bitmap format.
func jpeg(_ jpegQuality: JPEGQuality) -> Data? {
return UIImageJPEGRepresentation(self, jpegQuality.rawValue)
}
}
这是我尝试调用扩展方法的 PhotoController 的代码:
class PhotoController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
... ...
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
let mediaType = info[UIImagePickerControllerMediaType] as! NSString
if mediaType.isEqual(to: kUTTypeImage as String) {
let image = info[UIImagePickerControllerOriginalImage] as! UIImage
var res = image.jpeg(.lowest) as! UIImage
if (newMedia == true) {
UIImageWriteToSavedPhotosAlbum(res,
self,
#selector(PhotoController.image(image:didFinishSavingWithError:contextInfo:)),
nil)
}
}
self.dismiss(animated: true, completion: nil)
}
}
我不断收到错误消息:“UIImage”类型的值没有“压缩”成员。
另外,如何打印图像大小以确保它确实被压缩了?
【问题讨论】:
-
该代码无法在 Swift 4/5 中编译。你确定为文件 UIImage+compress.swift 选择了“Target Membership”吗?
-
-
@MartinR 你是什么意思?
-
@ShivanshSuhane: stackoverflow.com/a/30737191/1187415
-
鉴于
didFinishPickingMediaWithInfo的签名,您似乎也在使用旧版本的 Swift。