ios - Obtener la ruta del archivo local de un PHAsset
swift instagram (6)
Tengo una foto que quiero que mi usuario pueda compartir en Instagram y necesito obtener el directorio de archivos local de la foto.
Sin embargo, estoy obteniendo mis imágenes como PHAsset (no el ALAsset que todas las otras respuestas parecen cubrir sobre este tema).
En cuanto a la documentación de PHAsset, no veo una variable de ''directorio local''.
¿Sabe cómo puedo obtener el camino a una foto desde el rollo de cámara de los usuarios utilizando el nuevo marco ios8 Photo?
Aquí está mi código para cargar la última imagen en el rollo de fotos de los usuarios
public func loadLastPhotoIntoGalleryIcon()
{
if(PHPhotoLibrary.authorizationStatus() != PHAuthorizationStatus.Authorized)
{
return
}
var fetchOptions:PHFetchOptions = PHFetchOptions()
fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
var fetchResult:PHFetchResult = PHAsset.fetchAssetsWithMediaType(PHAssetMediaType.Image, options: fetchOptions)
var lastAsset:PHAsset = fetchResult.firstObject as PHAsset
var options:PHImageRequestOptions = PHImageRequestOptions()
options.version = PHImageRequestOptionsVersion.Current
PHImageManager.defaultManager().requestImageForAsset(lastAsset, targetSize: _view.getGalleryIconSize(), contentMode: PHImageContentMode.AspectFill, options: options)
{
(result, objects) -> Void in
self._view.setGalleryIcon(result)
}
}
Sí, debe convertir PHAsset a ALAsset, luego puede obtener la url de ALAsset. Algo como esto: PHImageManager.defaultManager (). RequestAVAssetForVideo ....
Solicita información de activos para comenzar una sesión de edición de contenido.
- (PHContentEditingInputRequestID)requestContentEditingInputWithOptions:(PHContentEditingInputRequestOptions *)options
completionHandler:(void (^)(PHContentEditingInput *contentEditingInput, NSDictionary *info))completionHandler;
La URL de un archivo que contiene los datos de imagen a tamaño completo.
@property(readonly, copy) NSURL *fullSizeImageURL;
Utilice la entrada de edición de contenido:
asset.requestContentEditingInputWithOptions(PHContentEditingInputRequestOptions()) { (input, _) in
let url = input.fullSizeImageURL
}
Asegúrese de que el activo sea PHAssetMediaType.Image
o, de lo contrario, puede fallar al desempacar un opcional.
asset = PHAsset * asset
[asset requestContentEditingInputWithOptions:[PHContentEditingInputRequestOptions new] completionHandler:^(PHContentEditingInput *contentEditingInput, NSDictionary *info) {
NSURL *imageURL = contentEditingInput.fullSizeImageURL;
}];
Asegúrese de que su PHAsset sea un tipo de imagen para verificar este PHAssetMediaType. La imagen debe ser verdadera
func getImagesFromAsset(anAsset: PHAsset) {
PHImageManager.default().requestImage(for: anAsset, targetSize: CGSize(width: 600, height: 600), contentMode: .aspectFill, options: nil, resultHandler: { (image, info) in
//resultHandler have info ([AnyHashable: Any])
print(info!["PHImageFileURLKey"])
if let img = image {
self.imgv.image = img
}
})
}
esto podría ayudar a pegar esto en su método CellForRowAt y pasar el PHAsset en el argumento.
PHAsset *asset = YOUR_ASSET;
PHImageManager *manager = [PHImageManager defaultManager];
PHImageRequestOptions *options = [PHImageRequestOptions new];
options.synchronous = YES;
options.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat;
options.resizeMode = PHImageRequestOptionsResizeModeNone;
options.networkAccessAllowed = NO;
[manager requestImageForAsset:YOUR_ASSET targetSize:PHImageManagerMaximumSize contentMode:PHImageContentModeDefault options:options resultHandler:^(UIImage *resultImage, NSDictionary *info){
NSURL *filePath = [info valueForKeyPath:@"PHImageFileURLKey"]
}];