2012-07-11 33 views
6

Tôi đang sử dụng đá quý omniauth-twitter để xác thực người dùng thông qua twitter. Tôi cũng đang sử dụng hình ảnh hồ sơ Twitter của họ làm hình đại diện cho trang web của tôi. Tuy nhiên, hình ảnh tôi nhận được từ Twitter có độ phân giải thấp. Tôi biết Twitter có các bức ảnh độ phân giải tốt hơn. Làm sao để tôi có được nó?Lấy hình ảnh hồ sơ trung bình hoặc lớn từ Twitter bằng omniauth-twitter

Đây là những gì tôi hiện đang làm. Nó là một phương thức trong mô hình người dùng. Nó hoạt động, chỉ cần không làm cho tôi một pic chất lượng tốt:

user.rb

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

Tôi nghĩ có lẽ tôi có thể vượt qua một tùy chọn kích thước lên nó bằng cách nào đó, nhưng dường như không thể tìm thấy một giải pháp tốt .

Trả lời

16

Tôi đang sử dụng đá quý omniauth-twitter. Trong phương pháp apply_omniauth của mô hình tài khoản của tôi, tôi lưu đường dẫn ảnh Twitter như thế này, tước _normal hậu tố:

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

Sau đó, tôi có một phương pháp helper gọi là chân dung mà chấp nhận một đối số kích thước. Như Terence Eden gợi ý, bạn chỉ có thể thay thế các _size hậu tố của tên tập tin để truy cập 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

Câu trả lời này đưa ra một câu trả lời chi tiết và hữu ích hơn, cùng với giải pháp để loại bỏ "_normal" bằng phương thức con. Cảm ơn! –

8

Khi bạn có URL của hình ảnh, nó khá đơn giản. Bạn cần xóa "_normal" khỏi cuối URL.

Dưới đây là hình ảnh avatar của tôi

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

Dưới đây là phiên bản lớn hơn

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

Một regex đơn giản là đủ.

Hãy nhớ rằng, kích thước của hình ảnh là không thể đoán trước - vì vậy bạn có thể muốn thay đổi kích thước hình ảnh trước khi hiển thị nó trên trang web của bạn.

+1

bạn bị mất tôi tại "Một regex đơn giản" :) Tôi sẽ cố gắng nó ra. Bất kỳ khuyến nghị nào về cách tốt nhất để thêm regex vào phương pháp tôi có? Cảm ơn. – thatdankent

+0

Trên thực tế, thay vì lưu url bằng các sửa đổi, tôi quyết định sửa đổi url khi tải hình ảnh vào chế độ xem bằng phương thức .sub như sau: user.picture.sub ("normal", "reasonably_small") – thatdankent

Các vấn đề liên quan