Dostaję obraz z Facebooka po adresie URL: http://external.ak.fbcdn.net/safe_image.php?d=d282e1e7c86c9270232f97ddc737df39&w=90&h=90&url=http%3A%2F%2Fi52.tinypic.com%2F2q0ixzl.jpg
Teraz chcę mieć większą wersję, na przykład 200 na 200. Czy istnieje adres URL? Jeśli nie, w jaki sposób mogę przekonwertować ten obraz na większy?
Zwykle, jeśli chcesz zebrać zdjęcie profilowe użytkownika lub strony, format obrazu wielkości ikony to:
http://graph.facebook.com/[page id/profile id]/picture
i dla dużego obrazu:
http://graph.facebook.com/[page id/profile id]/picture?type=large
EDYTOWAĆ Punkty do zapamiętania:
Jeśli obraz przechowywany na serwerach Facebooka jest mniejszy niż 200 * 200, otrzymasz obraz o najwyższej rozdzielczości, np. 128 * 160. Możesz zmienić rozmiar za pomocą biblioteki GD.
I JESZCZE JEDNO
Facebook obsługuje 200 * 600px jako najwyższą rozdzielczość dla zdjęcia profilowego. Zmieni rozmiar obrazu, dopasowując go do tych wymiarów, zachowując proporcje.
* AKTUALIZACJA na dzień 19 lutego 2017 r. *
Musimy użyć tego nowego adresu URL, aby uzyskać pożądany obraz profilu.
http://graph.facebook.com/{profile_id}/picture?width={number}&height={number}
[Dziękuję Ci https://stackoverflow.com/users/2829128/vay]
Jeśli chcesz uzyskać większy obraz, możesz ustawić wysokość i szerokość, które chcesz:
http://graph.facebook.com/[page id/profile id]/picture?width=[number]&height=[number]
Więcej informacji i przykładów tutaj: Zdjęcia - Facebook Developers
to również zadziała
typ obrazu (duży)
przykład
if ([FBSDKAccessToken currentAccessToken]) {
[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields": @"picture.type(large),name, email"}]
startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
if (!error) {
NSLog(@"fetched user:%@", result);
NSMutableDictionary *data=[[NSMutableDictionary alloc]init];
data=result;
fbId.text=[data valueForKey:@"id"];
userName.text=[data valueForKey:@"name"];
_emailFB.text=[data valueForKey:@"email"];
NSDictionary *dictionary = (NSDictionary *)result;
NSDictionary *data3 = [dictionary objectForKey:@"picture"];
NSDictionary *data2 = [data3 objectForKey:@"data"];
NSString *photoUrl = (NSString *)[data2 objectForKey:@"url"];
NSLog(@"Photo : %@",photoUrl);
}
}];
}
}
TAK, istnieje sposób na uzyskanie oryginalnego (większego czasu) zdjęcia profilu strony na Facebooku.
Właściwie odpowiedź już jest w pytaniu. Oryginalny URL obrazu jest już osadzony w urlowanym obrazie save_image. W twoim przypadku jest to "url = http% 3A% 2F% 2Fi52.tinypic.com% 2F2q0ixzl.jpg" co oznacza "http://i52.tinypic.com/2q0ixzl.jpg"
W moim przypadku strona dla Londynu jest
https://www.facebook.com/pages/London-United-Kingdom/106078429431815?fref=ts
Mogę łatwo uzyskać jego identyfikator obiektu fb według słowa kluczowego wyszukiwania Londyn.
Próbowałem użyć parametru width i height. Pracują z obrazem profilu użytkownika lub zdjęciem udostępnionym przez użytkownika, ale nie mogą pracować z obrazem profilu strony publicznej.
https://graph.facebook.com/106078429431815/picture?width=300&height=300 // can’t work
Największe zdjęcie mogę zdobyć podążając za adresem URL, który ma tylko 180x77
https://graph.facebook.com/106078429431815/picture?type=large
Ale mogę uzyskać adres URL safe_image.php za pomocą api fb graph, a oryginalny URL obrazu znajduje się również w sekcji adresu URL parametrów
"url": "https://fbexternal-a.akamaihd.net/safe_image.php?d=AQCrtKykRotXBuaS&w=180&h=540&url=http%3A%2F%2Fupload.wikimedia.org%2Fwikipedia%2Fcommons%2Fthumb%2Farchive%2F2%2F21%2F20141005220235%2521City_of_London_skyline_at_dusk.jpg%2F720px-City_of_London_skyline_at_dusk.jpg&fallback=hub_city&prefix=d"
Oto kod, którego użyłem.
[FBRequestConnection startWithGraphPath:[NSString stringWithFormat:@"/%@/picture?redirect=false&type=large",[firstCityPage objectForKey:@"id"]]
completionHandler:^(
FBRequestConnection *connection,
id result,
NSError *error
) {
NSString *profileImgUrl = [NSString stringWithFormat:@"http://graph.facebook.com/%@/picture?type=large", [firstCityPage objectForKey:@"id"]];
if (error==nil) {
NSString *fbSaveImgUrl = [[(NSDictionary*)result objectForKey:@"data"] objectForKey:@"url"];
NSURLComponents *urlComponents = [NSURLComponents componentsWithURL:[NSURL URLWithString:fbSaveImgUrl]
resolvingAgainstBaseURL:NO];
for (NSURLQueryItem *queryItem in urlComponents.queryItems) {
if ([queryItem.name isEqualToString:@"url"]) {
profileImgUrl = queryItem.value;
break;
}
}
} else {
NSLog(@"%@",[error description]);
}
NSLog(@"url: %@", profileImgUrl);
...
}];
ALE, istnieje ryzyko.
Nie ma gwarancji, że adres URL obrazu zewnętrznego zostanie zatwierdzony.
Facebook może usunąć jawny zewnętrzny URL z adresu URL safe_image lub ukryć adres URL safe_image od dewelopera w przyszłości.
Używaj go na własne ryzyko.