减小图像的文件大小

2023-12-01

我用安卓相机拍了一张照片。结果是一个字节数组。我通过将其写入SD卡(FileOutputStream)来保存它。结果是文件大小接近 3mb 的图像。我想减小此文件大小,因此压缩图像。

如果在将字节数组写入输出流之前能够减少文件大小,那就太好了。这是可能的还是我必须先保存它?


我通常会调整图像大小,从而缩小其尺寸

Bitmap bitmap = resizeBitMapImage1(exsistingFileName, 800, 600);

您还可以使用此代码压缩图像

ByteArrayOutputStream bytes = new ByteArrayOutputStream();
_bitmapScaled.compress(Bitmap.CompressFormat.JPEG, 40, bytes);

//you can create a new file name "test.jpg" in sdcard folder.
File f = new File(Environment.getExternalStorageDirectory()
                        + File.separator + "test.jpg")
f.createNewFile();
//write the bytes in file
FileOutputStream fo = new FileOutputStream(f);
fo.write(bytes.toByteArray());

// remember close de FileOutput
fo.close();

调整代码大小

public static Bitmap resizeBitMapImage1(String filePath, int targetWidth, int targetHeight) {
    Bitmap bitMapImage = null;
    try {
        Options options = new Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(filePath, options);
        double sampleSize = 0;
        Boolean scaleByHeight = Math.abs(options.outHeight - targetHeight) >= Math.abs(options.outWidth
                - targetWidth);
        if (options.outHeight * options.outWidth * 2 >= 1638) {
            sampleSize = scaleByHeight ? options.outHeight / targetHeight : options.outWidth / targetWidth;
            sampleSize = (int) Math.pow(2d, Math.floor(Math.log(sampleSize) / Math.log(2d)));
        }
        options.inJustDecodeBounds = false;
        options.inTempStorage = new byte[128];
        while (true) {
            try {
                options.inSampleSize = (int) sampleSize;
                bitMapImage = BitmapFactory.decodeFile(filePath, options);
                break;
            } catch (Exception ex) {
                try {
                    sampleSize = sampleSize * 2;
                } catch (Exception ex1) {

                }
            }
        }
    } catch (Exception ex) {

    }
    return bitMapImage;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

减小图像的文件大小 的相关文章

随机推荐

  • 如何在Android单元测试中模拟Bundle方法?

    我有一个处理片段创建的控制器类 让我们像下面这样说 public class FragmentController public static Fragment newInstance String title int total retu
  • 从网页链接打开客户端的桌面应用程序

    是否可以启动客户端桌面应用程序 例如Adobe Reader 任何游戏或任何其他软件来自网络 我有一个链接如何从网页 asp net 启动 EXE 其中之一已经让使用java脚本打开记事本 桌面应用程序 这仅限于IE 以类似的方式 我想在我
  • 更改 Eclipse Getters Setters 语法

    是否可以让 eclipse 生成 GetVar1 而不是 getVar1 大写G 我非常怀疑这一点 因为这违反了正常的 Java 方法命名约定和 JavaBeans 属性规则 I would 强烈地 强烈地建议您遵守 Java 命名约定 为
  • R正则表达式获得部分匹配

    我想使用 stri replace all regex 替换字符串但失败 我想知道是否还有其他方法可以克服它 感谢任何给我帮助的人 尝试 首先 gt library string gt a lt c abc2 xycd2 mnb345 tu
  • 用于要求所有元素的 Typescript 类型保护

    有没有办法要求带有打字稿的数组元素 这样我就可以拥有 type E keyof T Number of properties in T is unknown 令 T 的定义如下例所示 interface T el1 number el2 n
  • 为给定嵌套变量的出现创建编号序列

    我希望向数据集中添加一个变量 该变量对某个分组变量出现的实例进行排序 例如 ids lt c rep 1 4 rep 2 6 rep 3 2 我想要另一个变量来计算每个 id 出现的实例数 创建一个像这样的向量 1 2 3 4 1 2 3
  • 从命令行将参数传递给可执行文件[重复]

    这个问题在这里已经有答案了 我正在尝试从命令行将参数传递给 Fortran 可执行文件 用 C 语言实现此目的的示例程序是 取自here include
  • 由于下列问题,存档提交失败。错误 ITMS-90039

    我从 xcode 将应用程序上传到应用程序商店时遇到错误 类型不匹配 info plist 键 UILaunchImageName 的值不是该键所需的类型 更新 xcode 7 后出现此错误 只需从 info plist 文件中删除 UIL
  • 如何解决点击事件被触发两次的问题?

    我有一个一页应用程序 它使用backbone js 通过鼠标触发一次单击事件 通过触摸设备触发点击事件两次 取消绑定一键事件会在触摸设备上停止 我不知道从哪里开始寻找 这是JS classy on click button function
  • Python基于多种条件的随机样本选择

    我想在 python 中从以下 df 中进行随机样本选择 使得结果样本中至少 65 的颜色应为黄色 并且所选数量的累积总和应小于或等于 18 原始数据集 Date Id color qty 02 03 2018 A red 5 03 03
  • EF 4.1:为什么将常量转换为变量会导致额外的子查询?

    今天我发现实体框架向它生成的 SQL 添加了不必要的子查询 我开始挖掘我的代码 试图缩小它可能来自的范围 过了 很长 一段时间后 我查明了造成这种情况的原因 但现在我比开始时更困惑 因为我不知道为什么会导致这种情况 基本上我发现 在某些情况
  • 在 PySimpleGUI 中渲染 HTML?

    有谁知道是否可以让 PySimpleGUI 渲染 HTML 我并不想要一个成熟的浏览器 只是一个位于 PySimpleGUI 窗口中的 HTML 查看器 我知道 tkinter 有一个名为tk html widgets 我也在调查什么web
  • 就地编辑 CMS 建议 [关闭]

    Closed 这个问题是无关 目前不接受答案 我需要找到一个 非常 易于使用 对于编辑 作者 的 CMS 最好使用类似的就地编辑SiteCore 不过 我们不需要像 SiteCore 这样庞大而强大的东西 用户需要能够添加页面 使用我们在开
  • SignalR 应用程序无法在 IIS 下运行

    我正在尝试在 Visual Studio 2012 中构建 SignalR 应用程序 我的问题是它在 Visual Studio 调试下运行良好 在 Windows 7 上使用 Visual Studio 2012 但是当我尝试在 Wind
  • 在QML插件的QGLWidget上渲染QImage

    我正在尝试写一个QML插件从视频中读取帧 使用自定义小部件来执行该任务 而不是 QtMultimedia Phonon 并且每个帧都转换为QImageRGB888 然后显示在QGLWidget 出于性能原因 现在屏幕上没有任何内容 并且屏幕
  • 比较盒装长整型值 127 和 128

    我想比较两个Long对象值使用if状况 当这些值是小于 128 the if条件工作正常 但当他们大于或等于128 比较失败 Example Long num1 127 Long num2 127 if num1 num2 Works ok
  • 运行时错误:populate() 在 Django 中不可重入

    我正在尝试部署django网站 项目名称是pom 我尝试使用 apache2 在 ec2 服务器中运行 django 网站并收到以下错误 阿帕奇错误文件 Fri Jul 24 12 37 33 621285 2015 info pid 20
  • 为什么多维数组中需要更高维度的维度范围?

    根据该帖子 将 2D 数组传递给 C 函数 int array 10 10 void passFunc int a 10 lt Notice 10 here passFunc array 从编译器内部的角度来看 为什么需要这个更高的维度 另
  • 奇怪地使用方括号来调用函数

    使用方括号调用函数是如何工作的 100 toString function toString native code 100 toString length 1 这里到底发生了什么 这是括号表示法 任何属性都可以使用点或方括号表示法来访问
  • 减小图像的文件大小

    我用安卓相机拍了一张照片 结果是一个字节数组 我通过将其写入SD卡 FileOutputStream 来保存它 结果是文件大小接近 3mb 的图像 我想减小此文件大小 因此压缩图像 如果在将字节数组写入输出流之前能够减少文件大小 那就太好了