6

我正在使用omniauth-twitter gem 通过twitter 对用户进行身份验证。我还使用他们的 Twitter 个人资料图片作为我网站的头像。但是,我从 Twitter 获得的图像分辨率很低。我知道 Twitter 有更好的分辨率图片可用。我如何得到它?

这是我目前正在做的事情。它是用户模型中的一种方法。它有效,只是没有给我一张高质量的照片:

用户.rb

  def update_picture(omniauth)
    self.picture   = omniauth['info']['image'] 
  end

我想也许我可以通过某种方式将大小选项传递给它,但似乎找不到一个好的解决方案。

4

3 回答 3

16

我也在使用omniauth-twitter gem。在我的 User 模型的 apply_omniauth 方法中,我像这样保存 Twitter 图像路径,去掉 _normal后缀:

if omniauth['provider'] == 'twitter'
    self.image = omniauth['info']['image'].sub("_normal", "")
end

然后我有一个名为 Portrait 的辅助方法,它接受一个大小参数。正如 Terence Eden 所建议的,您只需替换文件名的_size后缀即可访问Twitter 提供的不同图像大小

def portrait(size)

    # Twitter
    # mini (24x24)                                                                  
    # normal (48x48)                                            
    # bigger (73x73)                                                
    # original (variable width x variable height)

    if self.image.include? "twimg"

        # determine filetype        
        case 
        when self.image.downcase.include?(".jpeg")
            filetype = ".jpeg"
        when self.image.downcase.include?(".jpg")
            filetype = ".jpg"
        when self.image.downcase.include?(".gif")
            filetype = ".gif"
        when self.image.downcase.include?(".png")
            filetype = ".png"
        else
            raise "Unable to read filetype of Twitter image for User ##{self.id}"
        end

        # return requested size
        if size == "original"
            return self.image
        else
            return self.image.gsub(filetype, "_#{size}#{filetype}")
        end

    end

end
于 2012-08-22T14:46:51.167 回答
8

一旦你有了图片的 URL,就很简单了。您需要从 URL 的末尾删除“_normal”。

这是我的头像

https://si0.twimg.com/profile_images/2318692719/7182974111_ec8e1fb46f_s_normal.jpg

这是更大的版本

https://si0.twimg.com/profile_images/2318692719/7182974111_ec8e1fb46f_s.jpg

一个简单的正则表达式就足够了。

请记住,图像的大小是不可预测的 - 因此您可能希望在将其显示在您的网站上之前调整它的大小。

于 2012-07-11T14:45:05.793 回答
2

更好的方法是通过omniauth-twittergem 的配置选项。

provider :twitter, "API_KEY", "API_SECRET", :image_size => 'original'

https://github.com/arunagw/omniauth-twitter

于 2014-11-17T23:33:45.377 回答