Resim adını PHAssets
kullanarak almaya çalışıyorum. Ancak dosya adı için meta veriler veya resim adını almak için herhangi bir yöntem bulamadım. Dosya adını almak için farklı bir yolu var mı? Eğer resim adını almak istiyorsanıziOS8 Fotoğraflar Çerçeve: Nasıl bir PHAsset adını (veya adını) almak için?
cevap
IMG_XXX.JPG gibi (Fotoğraflar son fotoğrafın örneğin isim), bu deneyebilirsiniz:
PHAsset *asset = nil;
PHFetchOptions *fetchOptions = [[PHFetchOptions alloc] init];
fetchOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:YES]];
PHFetchResult *fetchResult = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:fetchOptions];
if (fetchResult != nil && fetchResult.count > 0) {
// get last photo from Photos
asset = [fetchResult lastObject];
}
if (asset) {
// get photo info from this asset
PHImageRequestOptions * imageRequestOptions = [[PHImageRequestOptions alloc] init];
imageRequestOptions.synchronous = YES;
[[PHImageManager defaultManager]
requestImageDataForAsset:asset
options:imageRequestOptions
resultHandler:^(NSData *imageData, NSString *dataUTI,
UIImageOrientation orientation,
NSDictionary *info)
{
NSLog(@"info = %@", info);
if ([info objectForKey:@"PHImageFileURLKey"]) {
// path looks like this -
// file:///var/mobile/Media/DCIM/###APPLE/IMG_####.JPG
NSURL *path = [info objectForKey:@"PHImageFileURLKey"];
}
}];
}
yardımcı olur Umut.
Swift yılında kodu nedir gerçekten aradığınız ısrarla nesneyi tanımlayan benzersiz bir dizedir localIdentifier bu
PHImageManager.defaultManager().requestImageDataForAsset(asset, options: PHImageRequestOptions(), resultHandler:
{
(imagedata, dataUTI, orientation, info) in
if info!.keys.contains(NSString(string: "PHImageFileURLKey"))
{
let path = info![NSString(string: "PHImageFileURLKey")] as! NSURL
}
})
gibi görünecektir. here
Bir daha seçenektir
fetchAssetsWithLocalIdentifiers:options:, fetchAssetCollectionsWithLocalIdentifiers:options:, or fetchCollectionListsWithLocalIdentifiers:options: method.
daha fazla bilgiyi mevcuttur:
kullanın bu dize kullanarak nesneyi bulmak için
[asset valueForKey:@"filename"]
"yasallığı" nin karar vermek size kalmış.
PHAsset için 'filename' adında bir özellik yok. Nasıl çalışır? –
Büyü. =] Genel API'da bulunmayan özel bir özellik. Göreceli olarak kullanıldı, çünkü diğer, genel API, 'filename 'adı verilen özellikler var. –
, bu iOS 8'de çalışıyor mu? –
ben soru zaten yanıtlandı biliyorum ama başka bir seçenek sunmak düşündüm:
extension PHAsset {
var originalFilename: String? {
var fname:String?
if #available(iOS 9.0, *) {
let resources = PHAssetResource.assetResourcesForAsset(self)
if let resource = resources.first {
fname = resource.originalFilename
}
}
if fname == nil {
// this is an undocumented workaround that works as of iOS 9.1
fname = self.valueForKey("filename") as? String
}
return fname
}
}
basit cevabı Lütfen bir öğenin referans url vardır:
if let asset = PHAsset.fetchAssetsWithALAssetURLs([referenceUrl], options: nil).firstObject as? PHAsset {
PHImageManager.defaultManager().requestImageDataForAsset(asset, options: nil, resultHandler: { _, _, _, info in
if let fileName = (info?["PHImageFileURLKey"] as? NSURL)?.lastPathComponent {
//do sth with file name
}
})
}
SWIFT4: ilk import Photos
if let asset = PHAsset.fetchAssets(withALAssetURLs: [info[UIImagePickerControllerReferenceURL] as! URL],
options: nil).firstObject {
PHImageManager.default().requestImageData(for: asset, options: nil, resultHandler: { _, _, _, info in
if let fileName = (info?["PHImageFileURLKey"] as? NSURL)?.lastPathComponent {
print("///////" + fileName + "////////")
//do sth with file name
}
})
}
Bu, yalnızca kirli çözümdür. 'PHImageFileURLKey' belgesiz anahtardır ve görüntü düzenlenirse (örneğin resim filtresiyle) bu URL'nin son yol bileşeninde benzersiz bir adı yoktur. – user500
Kabartı her zaman dosya: ///var/mobile/Media/DCIM/###APPLE/IMG_####.JPG? Bunu şifrelemek için bir yol var mı ve sadece test.png için dosya adını aldınız mı? –
Ve sistemin görüntüleri yeniden adlandırmasını engellemenin bir yolu var mı? Bir görüntüyü cihazıma aktarırsam, bilgisayarımdan taşıdıkları ve daha sonra bunları uygulamaya aktardığım dosyaların aynısını korumasını isterim. O zamandan beri var mı? –