【问题标题】:Android change image size before sending via HTTP [duplicate]Android在通过HTTP发送之前更改图像大小[重复]
【发布时间】:2025-11-25 02:30:01
【问题描述】:

我的应用目前正在将图像从 Android 设备发送到 PHP 脚本,方法是将图像转换为位数组,然后转换为 base64。然后在 HTTP 请求中发送 base64 字符串。

问题是图像很大(如从安卓相机拍摄的图像)然后传输失败。我想要做的是在完成转换过程之前更改图像大小。

我该怎么做?我试过用谷歌搜索它,但到目前为止没有运气。

【问题讨论】:

标签: android image base64 image-size


【解决方案1】:

如果您的图像尺寸很大,那么您必须先缩小到小尺寸,然后通过 base64 类对其进行编码,然后将其发送到您的服务器上。

要缩放您的图像,请阅读此http://developer.sonymobile.com/2011/06/27/how-to-scale-images-for-your-android-application

或其他帖子

【讨论】:

    【解决方案2】:

    使用 jpeg 压缩!

    (因为我不确定发送一个 base64 编码的字节数组会如何为您节省任何空间。)

    我可以假设您已经将图像转换为像素数组吗?如果不是,我会假设没有理由应用从字节到表示像素的整数的明显转换。然后我们将其转换为压缩的 jpeg。

    final int[] pixels = yourpixels;
    

    你还需要宽度和高度:

    final int width = theWidth; etc...
    

    接下来,获取客户端中的输出流:

    final HttpURLConnection connection = doWhateverYouDoToOpenYourConnection();
    final OutputStream httpOutputStream = connection.getOutputStream();
    

    现在关键的一步是使用 Android 位图库的compression methods将压缩后的图像流式传输到 http 输出流

    final Bitmap androidBitmap = Bitmap.createBitmap(pixels, width, height,Config.ARGB_8888);
    androidBitmap.compress(android.graphics.Bitmap.CompressFormat.JPEG, YOUR_QUALITY_INT, outputStream);
    

    YOUR_QUALITY_INT = 85 之类的东西开始,可以看到图像尺寸的显着改进,而没有太多可见的变形。

    如果失败,请从scale matrix:文档here 创建一个缩放位图。这会减少创建时位图的宽度和高度,这显然会减少请求大小。

    希望这会有所帮助。

    【讨论】:

      最近更新 更多