下载高分辨率个人资料图片 Facebook Graph API

Posted

技术标签:

【中文标题】下载高分辨率个人资料图片 Facebook Graph API【英文标题】:Download high resolution profile image Facebook Graph API 【发布时间】:2017-02-24 11:25:09 【问题描述】:

使用 Swift 3.0,我可以使用这个图形调用函数下载当前用户的图像:

fileprivate func getCurrenUserHighResImageURL() -> String? 
    var photoURLOutput : String?
    let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphpath: "me", parameters: ["fields" : "picture.type(large)"])
    graphRequest.start(completionHandler:  connection, result , error -> Void in

        if ((error) != nil) 
            print("Error: \(error)")
         else 
            let castedResult = result as? [String : AnyObject]
            if let castedResult = castedResult 

                if let photURL = castedResult["picture"] as? [String : AnyObject] 
                    let photoData = photURL["data"] as? [String : AnyObject]
                    photoURLOutput = photoData?["url"] as? String
                    if let photoURLOutput = photoURLOutput 
                        CURRENT_USER_URL.updateChildValues(["highResImageURL" : "\(photoURLOutput)"])
                    
                
            
        
    )
    return photoURLOutput

但是,这只会返回 200 x 200 像素的图像。 有什么方法可以使图形调用更高分辨率?

我见过有人使用这样的 URL 调用图形 API:https://graph.facebook.com/userId/picture?width=640&height=640

如本文所述:Facebook Graph Profile Picture Link

但是当我尝试从该 URL 下载图像时...

 func loadUserImage(fromURL urlString:String?) 
    if urlString != nil 
        let imgURL: URL = URL(string: urlString!)!
        let request: URLRequest = URLRequest(url: imgURL)

        let session = URLSession.shared
        let task = session.dataTask(with: request, completionHandler: 
            (data, response, error) -> Void in

            if (error == nil && data != nil) 
                func display_image() 
                    let userImage = UIImage(data: data!)
                    self.userImage.image = userImage
                
                DispatchQueue.main.async(execute: display_image)
            
        )
        task.resume()
    

找不到图片。 (我知道此功能有效,因为它适用于所有其他图像)。当我直接在浏览器中输入链接时,它会返回一个 JSON 错误,说我没有授权。

有没有人幸运地进行了这样的图形调用?是否有一些我忽略的语法会返回更高分辨率的个人资料图像?

【问题讨论】:

【参考方案1】:

这就是我在 iPhone 7 上要求 200x200 和在大尺寸上要求 300x300 的要求。但是,我认为您不会得到具有这些确切尺寸的图像。它可能会稍大一些。

let deviceScale = Int(UIScreen.main.scale)
let width = 100 * deviceScale
let height = 100 * deviceScale
let parameters = ["fields": "first_name, last_name, picture.width(\(width)).height(\(height))"]

总之,请求 400x400 的参数的语法是 picture.width(400).height(400)

【讨论】:

很高兴为您提供帮助!顺便说一句,它是否可以在不指定.type(large) 的情况下工作?我认为它应该但只是想验证,因为我的应用程序中不再有此代码。 酷!我会更新答案,以便对其他人更简洁。

以上是关于下载高分辨率个人资料图片 Facebook Graph API的主要内容,如果未能解决你的问题,请参考以下文章

Android 获取当前网速质量调整网络请求

如何使用 NSURLSession 保存 Facebook 个人资料图片?

如何以全尺寸查看 instagram 个人资料图片? [关闭]

从 facebook API 保存用户的个人资料图片 - PHP SDK V.5

链接下载图片而不是查看图片

用高分辨率替换低分辨率图像时保持完全相同的缩放位置