【问题标题】:Android Twitter getting profile image size issueAndroid Twitter获取个人资料图像大小问题
【发布时间】:2013-02-05 01:04:59
【问题描述】:

我正在尝试获取我的关注者的个人资料图片,以便在 ListView 中用作缩略图。

这些缩略图大约是 125x125,但是标准的 twitter4j 调用 User.getProfileImageURL();返回小得多的 48x48 尺寸,也建议不要用作图像源。

我尝试创建一个 ProfileImage 对象并将其作为参数提供,User.getProfileImageURL(profile image object.Original),

但是这段代码需要一些时间来简单地检索 url,这在加载缩略图列表时效率很低。

关于如何解决这个问题有什么建议吗?

【问题讨论】:

    标签: android image twitter twitter4j


    【解决方案1】:

    编辑 Twitter API v1 已被禁用,所以我的旧答案不再有效。请参阅 API v1.1,我认为它需要身份验证。

    如果您知道屏幕名称,twitter api 允许您获取 4 种不同分辨率的个人资料图片;

     https://api.twitter.com/1/users/profile_image?screen_name=Krylez&size=mini
     https://api.twitter.com/1/users/profile_image?screen_name=Krylez&size=normal
     https://api.twitter.com/1/users/profile_image?screen_name=Krylez&size=bigger
     https://api.twitter.com/1/users/profile_image?screen_name=Krylez&size=original
    

    “更大”的图像是 73x73,它将插入到 125x125 的容器中。如果您对此不满意,您可以尝试获取“原始”照片,但这张照片可能非常大(速度慢)而且不一定是正方形。

    无论您选择哪种方法,请确保您没有在 UI 线程上获取和/或解码位图。 Android API 文档中有 excellent guidelines 以提供正确的方法。

    我们也可以使用 Twitter4j:

    mTwitter.getUserProfileImage();

    【讨论】:

    • 谢谢你的回复,你说的我已经知道了。我的问题是,为什么只获取图像“原始”版本的 URL 是一项耗时的任务?它只是得到一个字符串?当我尝试通过 ProfileImage.Original 实现这一点时,只需一秒钟多的时间才能简单地返回链接。但是链接不只是一个 url 对象或字符串吗?感谢您提供任何信息
    • 如果您查看 twitter4j 的源代码,User 的 LazyUser 实现实际上不会在构造函数中从 twitter 获取数据。它会推迟到第一个实际需要该信息的方法调用,然后将其保留以供将来的方法调用使用。
    • 我很困惑,请您详细说明一下吗?
    • 本质上,我正在遍历状态对象,并且只想获取原始大小的图像来填充大缩略图,但是我上面在获取此 URL 时描述的调用太贵了,导致我的提要显示慢了几秒钟。
    • 对。第一次对给定的 User 对象调用 getProfileImageURL() 时,网络操作正在发生。在构建列表视图之前对每个用户执行一次此方法调用,或者您可以自己构建 URL(如果您已经拥有用户名字符串)。
    【解决方案2】:

    来自官方文档:

    您可以从GET users/show 获取用户最近的个人资料图片。在用户对象中,您将找到 profile_image_url 和profile_image_url_https 字段。这些字段将包含 调整大小的用户上传图像的“正常”变体。这种“正常” 变体通常为 48x48px。

    通过修改 URL,您可以检索其他变体大小,例如 “更大”、“迷你”和“原创”。

    按照代码:

    TwitterApiClient twitterApiClient = TwitterCore.getInstance().getApiClient();
    twitterApiClient.getAccountService().verifyCredentials(false, false, new Callback<User>() {
        @Override
        public void success(Result<User> userResult) {
            String name = userResult.data.name;
            String email = userResult.data.email;
    
            // _normal (48x48px) | _bigger (73x73px) | _mini (24x24px)  
            String photoUrlNormalSize   = userResult.data.profileImageUrl;
            String photoUrlBiggerSize   = userResult.data.profileImageUrl.replace("_normal", "_bigger");
            String photoUrlMiniSize     = userResult.data.profileImageUrl.replace("_normal", "_mini");
            String photoUrlOriginalSize = userResult.data.profileImageUrl.replace("_normal", "");
        }
    
        @Override
        public void failure(TwitterException exc) {
            Log.d("TwitterKit", "Verify Credentials Failure", exc);
        }
    });
    

    更多信息请参考Twitter API Documentation | Profile Images and Banners

    要创建自定义尺寸图片,例如 90x90,您可以使用createScaledBitmap() 方法。

     private final int PROFILE_PIC_SIZE = 90;
     Bitmap originalPic = null;
     Bitmap resizedPic = null;
     try {
         InputStream in = new java.net.URL(photoUrlOriginalSize).openStream();
         originalPic = BitmapFactory.decodeStream(in);
         resizedPic = Bitmap.createScaledBitmap(originalPic, PROFILE_PIC_SIZE, PROFILE_PIC_SIZE, false);
     } catch (Exception exc) {
         Log.e("Error", exc.getMessage());
         exc.printStackTrace();
     }
    

    【讨论】:

      【解决方案3】:

      例如,您可以使用getOriginalProfileImageURL()。这是最大的。 较小的是getBiggerProfileImageURL() 和getProfileImageURL()。

      这些是您检索到的网址:

      http://pbs.twimg.com/profile_images/NUMBER/c62p-cAD_normal.jpeg
      http://pbs.twimg.com/profile_images/NUMBER/c62p-cAD_bigger.jpeg
      http://pbs.twimg.com/profile_images/NUMBER/c62p-cAD.jpeg
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-05-07
        • 1970-01-01
        • 2014-09-15
        • 2015-05-06
        • 1970-01-01
        • 1970-01-01
        • 2023-03-28
        相关资源
        最近更新 更多