欢迎加入我个人维护QQ群:379069176
PS:定期分享干货
将多张图片同时保存到相册中,出现的错误
将多张图片保存到相册中的时候,可能会出现系统忙碌或者一些莫名其妙的错误,使得程序在运行的时候,有的图片保存成功,有的图片则保存失败。原因有很多,最常见的原因应该是在同时保存图片的时候执行的是异步,所以导致系统出错,一般解决方案会使用逐一保存的方式,如果出错重新保存,虽然可以解决一部分的问题,但是仔细推敲一下,如果不是因为异步问题引发的错误怎么办??系统会陷入无限循环中去。
解决方法:用Photos FrameWork
来解决。
代码:
func saveImageInAlbum() -> NSError? {
var err: NSError?
PHPhotoLibrary.sharedPhotoLibrary().performChanges({
let _ = PHAssetChangeRequest.creationRequestForAssetFromImage(self.image)
}, completionHandler: { (success, error) -> Void in
if let error = error {
err = error
LOG(error.description)
}
self.complete = true
})
while !complete {
NSRunLoop.currentRunLoop().runMode(NSDefaultRunLoopMode, beforeDate: NSDate(timeIntervalSinceNow:0.01))
}
return err
}
通过上面的代码,在保存图片的地方进行调用即可,这个方法返回一个错误信息,可以根据错误信息进一步做处理。
根据ImageData判断Image的类型
获得imageData的2进制数据之后,来进行对图片格式的判断
/// image类型判断
func imageType(imgData : NSData) -> ImageType {
var c = [UInt32](count: 1, repeatedValue: 0)
let res : ImageType
imgData.getBytes(&c, length: 1)
switch (c[0]) {
case 0xFF:
res = .Jpeg
case 0x89:
res = .Png
case 0x47:
res = .Gif
case 0x49, 0x4D :
res = .Tiff
default:
res = .Unknown
}
return res
}
/// 类型
enum ImageType {
case Jpeg
case Png
case Gif
case Tiff
case Unknown
var ext: String {
switch self {
case .Jpeg:
return "jpg"
case .Png:
return "png"
case .Gif:
return "gif"
case .Tiff:
return "tiff"
case .Unknown:
return ""
}
}
}
image的缩放
这里做个备忘:
/// ImageView
func resizeImage(image: UIImage, targetSize: CGSize) -> UIImage {
if image.size == targetSize {
return image
}
let rect = CGRect(x: 0, y: 0, width: targetSize.width, height: targetSize.height)
UIGraphicsBeginImageContext(rect.size)
image.drawInRect(rect)
let resultImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return resultImage
}
好了,关于图片相关的一些Tips今后会时时更新。