0

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

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

我怎样才能做到这一点?我试过用谷歌搜索它,但到目前为止还没有运气。

4

2 回答 2

0

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

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

或其他帖子

于 2013-09-02T15:07:17.143 回答
0

使用JPEG压缩!

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

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

final int[] pixels = yourpixels;

您还需要宽度和高度:

final int width = theWidth; etc...

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

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

现在关键的一步是使用Android的位图库的压缩方法将压缩后的图像流式传输到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而没有太多可见的变形。

如果失败,请从比例矩阵创建缩放位图:此处的文档。这会减少创建时位图的宽度和高度,这显然会减少请求大小。

希望这可以帮助。

于 2013-09-02T16:02:28.397 回答