2012-07-11 119 views
6

我使用omniauth-twitter gem通过Twitter验证用户身份。我也使用他们的Twitter个人资料图片作为我的网站的头像。但是,我从Twitter获得的图像是低分辨率。我知道Twitter有更好的分辨率照片。我如何得到它?从omniauth-twitter获取中型或大型个人资料图片

这是我目前正在做的。这是用户模型中的一种方法。它的工作原理,只是没有得到我的好品质图片:

user.rb

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

我想也许我可以一个大小选项转嫁到它在某种程度上,但似乎无法找到一个很好的解决方案。

回答

16

我正在使用omniauth-twitter gem。在我的用户模型apply_omniauth方法,我保存这样的Twitter图片路径,剥离_normal后缀:

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

然后,我有所谓的肖像一个helper方法接受一个尺寸参数。至于特伦斯·伊登建议,您只需更换_size后缀的文件名来访问the different image sizes that Twitter provides

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 
+0

此答案给出了更详细和有用的答案,以及用子方法去除“_normal”的解决方案。谢谢! – 2013-05-22 20:57:25

8

一旦你有了图像的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 

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

请记住,图像的大小是不可预测的 - 所以你可能希望在显示它之前调整它的大小。

+1

你失去了我在 “一个简单的正则表达式” :)我会尝试一下。有关如何最好地将正则表达式添加到我拥有的方法的任何建议?谢谢。 – thatdankent 2012-07-11 17:20:48

+0

实际上,我没有保存带有修改的url,而是使用.sub方法将图像加载到视图中时修改了url:user.picture.sub(“normal”,“reasonably_small”) – thatdankent 2012-07-11 18:20:34

相关问题