8

電話のアセット (画像、ビデオ) に関する情報を格納するクラスがあります。

私のクラスはそのResourceURLStringように定義されています

@property NSURL *ResourceURL;

assets電話でループしながらプロパティを設定しています

Item.ResourceURLString = [[asset valueForProperty:ALAssetPropertyURLs] objectForKey:[[asset valueForProperty:ALAssetPropertyRepresentations] objectAtIndex:0]];

ユーザーが画像をクリックすると、画像が読み込まれます。

私が持っているコードはこれです

NSData *imageUrl = [NSData dataWithContentsOfURL:[NSURL URLWithString:[CurrentItem.ResourceURL absoluteString]]];    

Img = [UIImage imageWithData:imageUrl];

しかし、Image は常に nil です。ResourceURL プロパティに URL アセットが含まれていることを確認しました。library://asset/asset.JPG?id=82690321-91C1-4650-8348-F3FD93D14613&ext=JPG

4

5 に答える 5

14

この方法では画像をロードできません。

ALAssetsLibraryこれにはクラスを使用する必要があります。

プロジェクトに assetslibrary フレームワークを追加し、ヘッダー ファイルを追加します。

画像をロードするには、次のコードを使用します。

ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset)
{
    ALAssetRepresentation *rep = [myasset defaultRepresentation];
    CGImageRef iref = [rep fullResolutionImage];
    if (iref) {
        UIImage *largeimage = [UIImage imageWithCGImage:iref];
        yourImageView.image = largeImage;
    }
};

ALAssetsLibraryAccessFailureBlock failureblock  = ^(NSError *myerror)
{
    NSLog(@"Can't get image - %@",[myerror localizedDescription]);
};

NSURL *asseturl = [NSURL URLWithString:yourURL];
ALAssetsLibrary* assetslibrary = [[[ALAssetsLibrary alloc] init] autorelease];
[assetslibrary assetForURL:asseturl 
                   resultBlock:resultblock
                  failureBlock:failureblock];
于 2013-01-24T08:37:53.323 に答える
8

iOS 8以降、 Photos Frameworkを使用できます ここでは、Swift 3でそれを行う方法を示します

import Photos // use the Photos Framework

// declare your asset url
let assetUrl = URL(string: "assets-library://asset/asset.JPG?id=9F983DBA-EC35-42B8-8773-B597CF782EDD&ext=JPG")!

// retrieve the list of matching results for your asset url
let fetchResult = PHAsset.fetchAssets(withALAssetURLs: [assetUrl], options: nil)


if let photo = fetchResult.firstObject {

    // retrieve the image for the first result
    PHImageManager.default().requestImage(for: photo, targetSize: PHImageManagerMaximumSize, contentMode: .aspectFill, options: nil) {
        image, info in

        let myImage = image //here is the image
    }
}

画像の元のサイズを取得する場合は、PHImageManagerMaximumSizeを使用します。ただし、より小さいサイズまたは特定のサイズを取得する場合は、PHImageManagerMaximumSizeを次のように置き換えることができます。CGSize(width:150, height:150)

于 2016-11-08T08:10:57.480 に答える
6

現在、iOS 9.0ALAssetsLibraryは廃止されています。iOS 8.0 以降、これは PHPhotoLibrary で動作します。これは小さな UIImage 拡張機能、Swift 2X です。これは固定の画像サイズを使用します。

import Photos

extension UIImageView {

    func imageFromAssetURL(assetURL: NSURL) {

        let asset = PHAsset.fetchAssetsWithALAssetURLs([assetURL], options: nil)

        guard let result = asset.firstObject where result is PHAsset else {
           return
        }

        let imageManager = PHImageManager.defaultManager()

        imageManager.requestImageForAsset(result as! PHAsset, targetSize: CGSize(width: 200, height: 200), contentMode: PHImageContentMode.AspectFill, options: nil) { (image, dict) -> Void in
            if let image = image {
                self.image = image
            }
        }
    }
}

UIImagePickerController デリゲートから imageReferenceURL を取得します。

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
    imageURL = info[UIImagePickerControllerReferenceURL] as? NSURL
}

画像の設定

let imageView = UIImageView()
imageView.imageFromAssetURL(imageURL)

まだ遭遇したことのない影響があるかもしれません。古典的なものは UITableViewCell またはスレッドの問題です。私はこれを更新し続けます、また、あなたのフィードバックに感謝します.

于 2016-03-04T13:22:52.997 に答える
-1
ALAsset *asset = "asset array index"
[tileView.tileImageView setImage:[UIImage imageWithCGImage:[asset thumbnail]]];
于 2013-01-24T11:03:20.760 に答える