iOS Development With Swift

对图片的相关操作

2016-01-13  本文已影响34人  HenryPeng

欢迎加入我个人维护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今后会时时更新。

上一篇 下一篇

猜你喜欢

热点阅读