File.toURL () удержанный от использования?

Несмотря на то, что опубликованный код Ajinkya Sharma работал, я заметил, что при сохранении creationRequestForAsset производительность по сохранению изображений в кадре камеры была значительно ниже по сравнению с UIImageWriteToSavedPhotosAlbum. Поэтому я выбрал гибридное решение. Я сохранил, используя старую функцию, затем использовал среду PHAsset, чтобы получить самый новый файл изображения и получить его URL. Проблема решена.

public func saveImgToLocal(_ img: UIImage) {
    // significantly faster than creationRequestForAsset
    UIImageWriteToSavedPhotosAlbum(img, self, #selector(imageSaved(_:didFinishSavingWithError:contextInfo:)), nil)
}

@objc func imageSaved(_ img: UIImage, didFinishSavingWithError error: NSError?, contextInfo: UnsafeRawPointer) {
    if let error = error {
        // we got back an error!
        let ac = UIAlertController(title: "Save error", message: error.localizedDescription, preferredStyle: .alert)
        ac.addAction(UIAlertAction(title: "OK", style: .default))
        present(ac, animated: true)
    } else {
        let fetchOptions = PHFetchOptions()
        fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
        fetchOptions.fetchLimit = 1
        let fetchResult = PHAsset.fetchAssets(with: PHAssetMediaType.image, options: fetchOptions)
        if let asset = fetchResult.firstObject
        {
            self.imageHash.text = getAsset(asset: asset)
        }
    }
}

func getAsset(asset: PHAsset) -> String {
    let manager = PHImageManager.default()
    let option = PHImageRequestOptions()
    var hashString = "" as String
    option.isSynchronous = true
    manager.requestImage(for: asset, targetSize: PHImageManagerMaximumSize, contentMode: .aspectFit, options: option, resultHandler: {(result, info) -> Void in
        let url = info!["PHImageFileURLKey"] as! NSURL
        do {
            let data = try Data(contentsOf: url as URL)
            hashString = data.md5.rawValue
        }
        catch {
            hashString = "Error computing hash"
        }
    })
    return hashString
}
17
задан jww 1 February 2015 в 22:47
поделиться

4 ответа

It does not handle special characters correctly as per this bug.

14
ответ дан 30 November 2019 в 10:08
поделиться

Wouldn't it be easier to use Toolkit.createImage(File.getPath()); instead?

11
ответ дан 30 November 2019 в 10:08
поделиться

Why don't you just use the createImage function that takes a String filename instead?

5
ответ дан 30 November 2019 в 10:08
поделиться

Вы можете рассмотреть возможность использования ImageIO в качестве альтернативы.

1
ответ дан 30 November 2019 в 10:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: