【发布时间】:2025-11-25 02:30:01
【问题描述】:
我的应用目前正在将图像从 Android 设备发送到 PHP 脚本,方法是将图像转换为位数组,然后转换为 base64。然后在 HTTP 请求中发送 base64 字符串。
问题是图像很大(如从安卓相机拍摄的图像)然后传输失败。我想要做的是在完成转换过程之前更改图像大小。
我该怎么做?我试过用谷歌搜索它,但到目前为止没有运气。
【问题讨论】:
标签: android image base64 image-size
我的应用目前正在将图像从 Android 设备发送到 PHP 脚本,方法是将图像转换为位数组,然后转换为 base64。然后在 HTTP 请求中发送 base64 字符串。
问题是图像很大(如从安卓相机拍摄的图像)然后传输失败。我想要做的是在完成转换过程之前更改图像大小。
我该怎么做?我试过用谷歌搜索它,但到目前为止没有运气。
【问题讨论】:
标签: android image base64 image-size
如果您的图像尺寸很大,那么您必须先缩小到小尺寸,然后通过 base64 类对其进行编码,然后将其发送到您的服务器上。
要缩放您的图像,请阅读此http://developer.sonymobile.com/2011/06/27/how-to-scale-images-for-your-android-application
或其他帖子
【讨论】:
使用 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 创建一个缩放位图。这会减少创建时位图的宽度和高度,这显然会减少请求大小。
希望这会有所帮助。
【讨论】: