Richard
Richard

Reputation: 14625

Getting full-size profile picture

Is there anyway to get the full-size profile picture using any facebook api?

http://graph.facebook.com/{ID}/picture?type=large is way to small.

Thanks :)

Upvotes: 53

Views: 127212

Answers (7)

Vương Hữu Thiện
Vương Hữu Thiện

Reputation: 1710

For Angular:

getUserPicture(userId) {   
FB.api('/' + userId, {fields: 'picture.width(800).height(800)'}, function(response) {
  console.log('getUserPicture',response);
});
}

Upvotes: 2

Smita
Smita

Reputation: 4634

I think I use the simplest method to get the full profile picture. You can get full profile picture or you can set the profile picture dimension yourself:

$facebook->api(me?fields=picture.width(800).height(800))

You can set width and height as per your need. Though Facebook doesn't return the exact size asked for, It returns the closest dimension picture available with them.

Upvotes: 87

Lri
Lri

Reputation: 27603

Set either the width or height to some arbitrarily large number:

https://graph.facebook.com/username_or_id/picture?width=9999

If the width and height are the same number, the photo is cropped to a square.

Upvotes: 126

Kristian
Kristian

Reputation: 21

With Javascript you can get full size profile images like this

pass your accessToken to the getface() function from your FB.init call

function getface(accessToken){
  FB.api('/me/friends', function (response) {
    for (id in response.data) { 
        var homie=response.data[id].id         
        FB.api(homie+'/albums?access_token='+accessToken, function (aresponse) {
          for (album in aresponse.data) {
            if (aresponse.data[album].name == "Profile Pictures") {                      
              FB.api(aresponse.data[album].id + "/photos", function(aresponse) {
                console.log(aresponse.data[0].images[0].source); 
              });                  
            }
          }   
        });
    }
  });
}

Upvotes: 2

Richard
Richard

Reputation: 14625

found a way:

$albums = $facebook->api('/' . $user_id . '/albums');
foreach($albums['data'] as $album){
    if ($album['name'] == "Profile Pictures"){
        $photos = $facebook->api('/' . $album['id'] . '/photos');
        $profile_pic = $photos['data'][0]['source'];
        break;
    }
}

Upvotes: 6

David Kinghorn
David Kinghorn

Reputation: 161

As noted above, it appears that the cover photo of the profile album is a hi-res profile picture. I would check for the album type of "profile" rather than the name though, as the name may not be consistent across different languages, but the type should be.

To reduce the number of requests / parsing, you can use this fql: "select cover_object_id from album where type='profile' and owner = user_id"

And then you can construct the image url with: "https://graph.facebook.com/" + cover_object_id + "/picture&type=normal&access_token=" + access_token

Looks like there is no "large" type for this image, but the "normal" one is still quite large.

As noted above, this photo may be less accessible than the public profile picture. You need the user_photos or friend_photos permission to access it.

Upvotes: 4

ACarter
ACarter

Reputation: 5697

Profile pictures are scaled down to 125x125 on the facebook sever when they're uploaded, so as far as I know you can't get pictures bigger than that. How big is the picture you're getting?

Upvotes: -7

Related Questions