如何获取ImageView图像大小(Android)

时间:2014-11-28 11:26:17

标签: android android-imageview android-image

我正在开发一个图片库应用程序,我在其中加载来自互联网的图像,我在按钮点击时将图像保存到SD卡。

现在我想要的是我想获得ImageView中加载的图像的大小。我想以KB /字节为单位获取图像大小。

我想使用图像大小来防止重复保存和替换图像。

这是我用来保存图片的代码: 相同分辨率的图像被替换

    int intHeight = fullImageView.getHeight();
        int intWidth = fullImageView.getWidth();


        String dirname2 = "/Wallpapers/";

        File myDir2 = new File(Environment.getExternalStorageDirectory()
                .getPath() + dirname2);

        myDir2.mkdirs();

        String fname2 = "image" + intHeight + intWidth +".jpeg";
        File file2 = new File(myDir2, fname2);

        if (file2.exists())
            file2.delete();
        try {
            FileOutputStream out = new FileOutputStream(file2);
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
            out.flush();
            out.close();

        } catch (Exception e) {
            Toast.makeText(_context, "failed", Toast.LENGTH_SHORT).show();
        }

请注意:我问的是KB或字节的图像大小

2 个答案:

答案 0 :(得分:1)

不要将图像尺寸用作相似性的验证。 而是比较图像。最简单的方法是迭代每一个 像素并比较RGB值。但这只会给你一个有效的答案 如果图像真的是100%相等。如果你想检测相似性 根据图像,不论分辨率如何,你应该搜索一个图书馆 比较图像。

edit2:如前所述,按照结构“比较”图片需要一段时间。 在这种情况下,我建议将url,name和etag存储在数据库中 如果要保存图像,请通过UUID保存图像并进行数据库查找(快速)。 但是不要重新发明轮子。只需使用一个库 能够处理这种图像存储。我推荐Picasso

编辑:我可以为您提供像素迭代的示例代码。随意加强它:

public static void iterateOverImage(BufferedImage image){  
    int currentColor;
    for(int x = 0; x < widthInPx; x++){
        for(int y = 0; y < heightInPx; y++){
            currentColor = image.getRGB(x, y);
            //do something with it (i.e comparison)
        }
    }
}

<强> EDIT3:

    public int sizeInByte() {
    try {
        ByteArrayOutputStream b = new ByteArrayOutputStream();
        ObjectOutputStream o = new ObjectOutputStream(b);
        o.writeObject(yourObject);
        o.flush();
        o.close();
        return b.length;
    } catch (IOException e) {
        ExceptionHandler.logAndSendException(e);
    }
    return -1;
}

并且cgew85回答!

对不起我的英语和问候,史蒂夫。

答案 1 :(得分:1)

您可以使用File的length()方法。像:

long size = yourFile.length();

的JavaDoc:

  

返回此抽象路径名表示的文件的长度。如果此路径名表示目录,则返回值未指定。

但是我强烈建议使用哈希值而不是文件大小。