从原始数据到UIIMAGEPNGERTERTATION,以更少的步骤进行



使用此代码,i 提取来自共享扩展名的图像,然后将其写入我在应用程序组中创建的目录。

let content = self.extensionContext!.inputItems[0] as! NSExtensionItem
   let contentType = kUTTypeImage as String
      for attachment in content.attachments as! [NSItemProvider] {
         if attachment.hasItemConformingToTypeIdentifier(contentType) {
            attachment.loadItem(forTypeIdentifier: contentType, options: nil) { data, error in
            // from here
            if error == nil {
               let url = data as! NSURL
               let originalFileName = url.lastPathComponent
               if let imageData = NSData(contentsOf: url as URL) {
                  let img = UIImage(data:imageData as Data)
                  if let data = UIImagePNGRepresentation(img!) {
                     // write, etc.
                                    }
                                }
                            }
                        }

任何事情都很好。

我想知道的是是否可以减少一些代码:尤其是在if error == nil之后,I:

  • 将数据施加到NSURL;
  • 使用NSURL获得NSData;
  • 使用NSData获取UIImage;
  • 使用UIImage获取UIImagePNGRepresentation;

除了避免创建ImageData变量外,没有一种方法(安全地)以更少的步骤实现相同的目标?

首先,您需要使用本机DataURL而不是NSData& NSURL另外,如果要在 DocumentDirectory中写文件,则可以直接使用该iMagedata,而无需从中制作 UIImage对象,然后使用 UIImagePNGRepresentation

将其转换为数据
if let url = data as? URL, error == nil {
    let originalFileName = url.lastPathComponent
    if let imageData = try? Data(contentsOf: data) {
        // write, etc.
        var destinationURL  = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
        destinationURL.appendPathComponent("fileName.png")
        try? imageData.write(to: destinationURL)
    }
}

相关内容

  • 没有找到相关文章

最新更新