如何从Android中的图片网址获取图片的精确图片尺寸?

时间:2014-10-13 09:23:38

标签: android rss imageview

我正在申请博客。博客中的文章可能包含文本之间的图像。为了实现这一点,我使用了URLImageParser类,它扩展了ImageGetter以将Images绑定到Textview。我能够附加图像,但图像的大小是不同的。

当我在浏览器中打开图像时,我可以看到更大的图片,但在我的应用程序中,我的宽度和高度越来越小。如何根据浏览器中的图像大小调整宽度和高度。

URLImageParser类:

public class URLImageParser implements ImageGetter {
Context c;
TextView container;
int width;


public URLImageParser(TextView t, Context c) {
    this.c = c;
    this.container = t;

}

public Drawable getDrawable(String source) {
    URLDrawable urlDrawable = new URLDrawable();


    ImageGetterAsyncTask asyncTask = new ImageGetterAsyncTask(urlDrawable);

    asyncTask.execute(source);

    return urlDrawable;
}

public class ImageGetterAsyncTask extends AsyncTask<String, Void, Drawable>  {
    URLDrawable urlDrawable;

    public ImageGetterAsyncTask(URLDrawable d) {
        this.urlDrawable = d;
    }

    @Override
    protected Drawable doInBackground(String... params) {
        String source = params[0];
        return fetchDrawable(source);
    }

    @Override 
    protected void onPostExecute(Drawable result) { 


        urlDrawable.setBounds(0, 0, 0+width, 0+result.getIntrinsicHeight());  

        urlDrawable.drawable = result; 

        // redraw the image by invalidating the container 
        URLImageParser.this.container.invalidate();

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH)
        {
             // For ICS
            URLImageParser.this.container.setHeight((URLImageParser.this.container.getHeight() 
                    + result.getIntrinsicHeight()));
        }    
        else 
        {
             // Pre ICS
            URLImageParser.this.container.setEllipsize(null);
        }

        container.setText(container.getText()); 

    } 


    public Drawable fetchDrawable(String urlString) {
        try 
        {
            InputStream is = fetch(urlString);
            Drawable drawable = Drawable.createFromStream(is, "src");
            drawable.setBounds(0, 0, 0 + drawable.getIntrinsicWidth(), 0 + drawable.getIntrinsicHeight()); 
            return drawable;
        } catch (Exception e) {
            return null;
        } 
    }

    private InputStream fetch(String urlString) throws MalformedURLException, IOException {
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpGet request = new HttpGet(urlString);
        HttpResponse response = httpClient.execute(request);
        return response.getEntity().getContent();
    }
}

}

将其绑定到TextView:

URLImageParser p = new URLImageParser(tvArticle, this);
Spanned htmlSpan = Html.fromHtml(x+y, p, null);
tvArticle.setText(htmlSpan);
tvArticle.setMovementMethod(LinkMovementMethod.getInstance()); 

Image my app和Browser的屏幕截图:

enter image description here

enter image description here

3 个答案:

答案 0 :(得分:0)

首先,在浏览器版本中,您需要添加&#34; w = 680&#34;到请求,这可能使服务器处理680宽度的图像。如果你从Android版本中做同样的事情,你可能会得到一个更接近你期望接收的图像。

其次,如果您希望图片在不考虑设备密度的情况下显示特定尺寸,那么您需要根据倾角尺寸(密度 - 独立像素)调整包含ImageView的尺寸)。

您可以找到执行此操作的方法here

Resources r = getResources();
float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, sizeInDp, r.getDisplayMetrics()); 

然后,使用px参数,您可以相应地调整位图大小,甚至可以直接从服务器请求此大小的图像。

答案 1 :(得分:0)

您有两种选择:

第一个选项

您在WebView中显示内容,该内容将自行处理网页,您无需调整大小等。

第二个选项

您解析网页的源代码并找到页面源代码中给出的图像尺寸,并将它们转换为DP单元并将其应用于ImageView。

答案 2 :(得分:0)

您可以使用以下方法来了解网址图片的高度和宽度。

private void getDropboxIMGSize(Uri uri){
       BitmapFactory.Options options = new BitmapFactory.Options();
       options.inJustDecodeBounds = true;
       BitmapFactory.decodeFile(uri.getPath()).getAbsolutePath(), options);
       int imageHeight = options.outHeight;
       int imageWidth = options.outWidth;

    }