2012-08-09 10 views
16

FBProfilePictureViewですべてうまくいっていますが、FBProfilePictureViewからその画像を取得してUIImageに変換する必要があります。FBProfilePictureViewをUIImageに変換するにはどうすればよいですか?

どうすればよいですか?

私はこれを使用してみました:

UIGraphicsBeginImageContext(self.profilePictureView.frame.size); 
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
self.TestPictureOutlet.image = viewImage; 

しかし、私の解決のために、このdoesntの仕事。

+0

UIImageを公開しなかった理由はわかりません。ラメのソリューションですが、グラフAPIを使用してURL経由でロードできますか? –

答えて

17

FBProfilePictureViewはUIViewのある、このUIViewのはUIImageViewが含まれている、それはあなたのイメージである、あなたはそのUIImageViewからUIImageを取得することができます:他を追加します。

profilePictureViewはFBProfilePictureView

UIImage *image = nil; 

for (NSObject *obj in [profilePictureView subviews]) { 
    if ([obj isMemberOfClass:[UIImageView class]]) { 
     UIImageView *objImg = (UIImageView *)obj; 
     image = objImg.image; 
     break; 
    } 
} 

EDITです方法はもっと速く、同じことをしてください。

__block UIImage *image = nil; 

[self.view.subviews enumerateObjectsUsingBlock:^(NSObject *obj, NSUInteger idx, BOOL *stop) { 
    if ([obj isMemberOfClass:[UIImageView class]]) { 
     UIImageView *objImg = (UIImageView *)obj; 
     image = objImg.image; 
     *stop = YES; 
    } 
}]; 
+2

これはnilを返します。 –

+2

Yup ... nilを返します。これは誰のために働いていますか? – Dev

+1

イメージがまだダウンロードされていない場合は、イメージがダウンロードされたときに遅延を設定するかUIImageをロードする必要があります。そうでなければnilを返しますが、このコードは – busta117

0

ここでは解決策です。

手順:

は、このクラスのオブジェクトだ "userPictureImageView"

-(void)saveFBUserImage 
{ 

    CGSize imageSize = self.userPictureImageView.frame.size; 

    UIGraphicsBeginImageContext(imageSize); 
    CGContextRef imageContext = UIGraphicsGetCurrentContext(); 

    [self.userPictureImageView.layer renderInContext: imageContext]; 
    UIImage* viewImage = UIGraphicsGetImageFromCurrentImageContext(); 

    UIGraphicsEndImageContext(); 

    NSData *imageData = UIImageJPEGRepresentation(viewImage,1); 

    UIImage * img = [UIImage imageWithData:imageData]; 

    NSString *filePath = <specify your path here>; 

    CGSize size = img.size; 

    if(size.height > 50) 
     size.height = 50; 
    if(size.width > 50) 
     size.width = 50; 

    CGRect rect = CGRectMake(0.0f, 0.0f, size.width, size.height); 
    CGSize size2 = rect.size; 

    UIGraphicsBeginImageContext(size2); 

    [img drawInRect:rect]; 
    img = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    NSData *newImageData = UIImageJPEGRepresentation(img, 1.0); 
    [newImageData writeToFile:filePath atomically:YES]; 
} 

である私の場合には、クラス "FBProfilePictureView" の対象にFBのユーザーIDが割り当てられていることを確認してくださいそれ。 :-)

3

上記の両方の解決策は、FBProfilePictureViewからUIImageオブジェクトを取得するのにうまく機能します。 FBProfilePictureViewから画像を取得するには、遅延をあらかじめ設定する必要があります。 Like:

[FBRequest requestForMe] startWithCompletionHandler: 
    ^(FBRequestConnection *connection, NSDictionary<FBGraphUser> *user, NSError *error) { 
     if (!error) { 

      myNameLbl.text = user.name; 
      profileDP.profileID = user.id; 

//NOTE THIS LINE WHICH DOES THE MAGIC 

[self performSelector:@selector(getUserImageFromFBView) withObject:nil afterDelay:1.0]; 

}]; 

- (void)getUserImageFromFBView{ 

    UIImage *img = nil; 

    //1 - Solution to get UIImage obj 

    for (NSObject *obj in [profileDP subviews]) { 
     if ([obj isMemberOfClass:[UIImageView class]]) { 
      UIImageView *objImg = (UIImageView *)obj; 
      img = objImg.image; 
      break; 
     } 
    } 

    //2 - Solution to get UIImage obj 

// UIGraphicsBeginImageContext(profileDP.frame.size); 
// [profileDP.layer renderInContext:UIGraphicsGetCurrentContext()]; 
// img = UIGraphicsGetImageFromCurrentImageContext(); 
// UIGraphicsEndImageContext(); 

//Here I'm setting image and it works 100% for me. 

    testImgv.image = img; 

} 

よろしくお願いいたします。

アーミル・アリ - のiOSアプリ開発

@timeグループ(TGD)

0

私はかなり仕事ができることソリューションの上に発見したが、ここで私は行くことがより簡単に見つけコードを更新しています。

@property FBSDKProfilePictureView *pictureView; 

if ([FBSDKAccessToken currentAccessToken]) { 


    self.pictureView=[[FBSDKProfilePictureView alloc]init]; 

    [self.pictureView setProfileID:@"me"]; 
    [self.pictureView setPreservesSuperviewLayoutMargins:YES]; 
    [self.pictureView setPictureMode:FBSDKProfilePictureModeNormal]; 
    [self.pictureView setNeedsImageUpdate]; 
    [self performSelector:@selector(getUserImageFromFBView) withObject:nil afterDelay:1.0]; 

} 

-(void) getUserImageFromFBView 
{ 
UIImage *image = nil; 

for (NSObject *obj in [self.pictureView subviews]) { 
    if ([obj isMemberOfClass:[UIImageView class]]) { 
     UIImageView *objImg = (UIImageView *)obj; 
     image = objImg.image; 
     break; 
    } 
} 
[self.profilePic setImage:image forState:UIControlStateNormal]; 
} 

ここでは、プロファイル写真が読み込まれるのを待つために1秒の遅延を入れました。

関連する問題