如何从 PHAsset 获取图像 URL?是否可以使用 PHAsset URL 将图像保存到文档目录?
How To get Image URL From PHAsset? Is it possible To save Image using PHAsset URL to document Directory?
我用过
`NSURL *urlA = [info valueForKey:@"PHImageFileURLKey"];`
但是当我尝试使用 URL 保存图像时 URL 为零。
`NSData *pngData =[NSData dataWithContentsOfURL:urlA options:NSDataReadingMapped error:nil];`
您可以从 PHContentEditingInput:
获取 imageURL
Swift:
asset.requestContentEditingInput(with: PHContentEditingInputRequestOptions()) { (eidtingInput, info) in
if let input = eidtingInput, let imgURL = input.fullSizeImageURL {
// imgURL
}
}
Objective-C:
[asset requestContentEditingInputWithOptions:[PHContentEditingInputRequestOptions new] completionHandler:^(PHContentEditingInput *contentEditingInput, NSDictionary *info) {
NSURL *imageURL = contentEditingInput.fullSizeImageURL;
}];
asset = 在这里你必须传递你的 PHAsset 。
PHImageRequestOptions * imageRequestOptions = [[PHImageRequestOptions alloc] init];
[[PHImageManager defaultManager]
requestImageDataForAsset:asset
options:imageRequestOptions
resultHandler:^(NSData *imageData, NSString *dataUTI,
UIImageOrientation orientation,
NSDictionary *info)
{
NSLog(@"info = %@", info);
if ([info objectForKey:@"PHImageFileURLKey"]) {
NSURL *path = [info objectForKey:@"PHImageFileURLKey"];
// if you want to save image in document see this.
[self saveimageindocument:imageData withimagename:[NSString stringWithFormat:@"DEMO"]];
}
}];
-(void) saveimageindocument:(NSData*) imageData withimagename:(NSString*)imagename{
NSString *writePath = [NSString stringWithFormat:@"%@/%@.png",[Utility getDocumentDirectory],imagename];
if (![imageData writeToFile:writePath atomically:YES]) {
// failure
NSLog(@"image save failed to path %@", writePath);
} else {
// success.
NSLog(@"image save Successfully to path %@", writePath);
}
}
+ (NSString*)getDocumentDirectory {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
return [paths objectAtIndex:0];
}
检查横向模式或纵向模式的图像
if (chooseimage.size.height >= chooseimage.size.width)
{
Islandscape = NO;
}else{
UIImage* landscapeImage = [UIImage imageWithCGImage:chooseimage.CGImage
scale:chooseimage.scale
orientation:UIImageOrientationLeft];
self.imgPreviewView.image = landscapeImage;
self.imgPreviewView.contentMode = UIViewContentModeScaleAspectFill;
Islandscape = YES;
}
将此权限添加到 info.plist 文件
<key>NSPhotoLibraryUsageDescription</key>
<string>$(PRODUCT_NAME) would like to access your photo library to let you select a picture.</string>
//这是完整的Swift获取图像的代码URL,带有Himanshu Moradiya的PHAsset答案
let imageRequestOptions = PHImageRequestOptions()
PHImageManager.default().requestImageData(for: currentAsset, options: imageRequestOptions, resultHandler: { imageData, dataUTI, orientation, info in
if let info = info {
print("info = \(info)")
}
if info?["PHImageFileURLKey"] != nil {
let path = info?["PHImageFileURLKey"] as? URL
print(path) //here you get complete URL
// if you want to save image in document see this.
// self.saveimageindocument(imageData, withimagename: "DEMO")
}
})
我用过
`NSURL *urlA = [info valueForKey:@"PHImageFileURLKey"];`
但是当我尝试使用 URL 保存图像时 URL 为零。
`NSData *pngData =[NSData dataWithContentsOfURL:urlA options:NSDataReadingMapped error:nil];`
您可以从 PHContentEditingInput:
获取 imageURLSwift:
asset.requestContentEditingInput(with: PHContentEditingInputRequestOptions()) { (eidtingInput, info) in
if let input = eidtingInput, let imgURL = input.fullSizeImageURL {
// imgURL
}
}
Objective-C:
[asset requestContentEditingInputWithOptions:[PHContentEditingInputRequestOptions new] completionHandler:^(PHContentEditingInput *contentEditingInput, NSDictionary *info) {
NSURL *imageURL = contentEditingInput.fullSizeImageURL;
}];
asset = 在这里你必须传递你的 PHAsset 。
PHImageRequestOptions * imageRequestOptions = [[PHImageRequestOptions alloc] init];
[[PHImageManager defaultManager]
requestImageDataForAsset:asset
options:imageRequestOptions
resultHandler:^(NSData *imageData, NSString *dataUTI,
UIImageOrientation orientation,
NSDictionary *info)
{
NSLog(@"info = %@", info);
if ([info objectForKey:@"PHImageFileURLKey"]) {
NSURL *path = [info objectForKey:@"PHImageFileURLKey"];
// if you want to save image in document see this.
[self saveimageindocument:imageData withimagename:[NSString stringWithFormat:@"DEMO"]];
}
}];
-(void) saveimageindocument:(NSData*) imageData withimagename:(NSString*)imagename{
NSString *writePath = [NSString stringWithFormat:@"%@/%@.png",[Utility getDocumentDirectory],imagename];
if (![imageData writeToFile:writePath atomically:YES]) {
// failure
NSLog(@"image save failed to path %@", writePath);
} else {
// success.
NSLog(@"image save Successfully to path %@", writePath);
}
}
+ (NSString*)getDocumentDirectory {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
return [paths objectAtIndex:0];
}
检查横向模式或纵向模式的图像
if (chooseimage.size.height >= chooseimage.size.width)
{
Islandscape = NO;
}else{
UIImage* landscapeImage = [UIImage imageWithCGImage:chooseimage.CGImage
scale:chooseimage.scale
orientation:UIImageOrientationLeft];
self.imgPreviewView.image = landscapeImage;
self.imgPreviewView.contentMode = UIViewContentModeScaleAspectFill;
Islandscape = YES;
}
将此权限添加到 info.plist 文件
<key>NSPhotoLibraryUsageDescription</key>
<string>$(PRODUCT_NAME) would like to access your photo library to let you select a picture.</string>
//这是完整的Swift获取图像的代码URL,带有Himanshu Moradiya的PHAsset答案
let imageRequestOptions = PHImageRequestOptions()
PHImageManager.default().requestImageData(for: currentAsset, options: imageRequestOptions, resultHandler: { imageData, dataUTI, orientation, info in
if let info = info {
print("info = \(info)")
}
if info?["PHImageFileURLKey"] != nil {
let path = info?["PHImageFileURLKey"] as? URL
print(path) //here you get complete URL
// if you want to save image in document see this.
// self.saveimageindocument(imageData, withimagename: "DEMO")
}
})