我的应用程序目前正在通过将图像转换为位数组然后转换为 base64 将图像从 Android 设备发送到 PHP 脚本。然后在 HTTP 请求中发送 base64 字符串。
问题是图像很大(如从安卓相机拍摄的图像)然后传输失败。我想要做的是在完成转换过程之前更改图像大小。
我怎样才能做到这一点?我试过用谷歌搜索它,但到目前为止还没有运气。
我的应用程序目前正在通过将图像转换为位数组然后转换为 base64 将图像从 Android 设备发送到 PHP 脚本。然后在 HTTP 请求中发送 base64 字符串。
问题是图像很大(如从安卓相机拍摄的图像)然后传输失败。我想要做的是在完成转换过程之前更改图像大小。
我怎样才能做到这一点?我试过用谷歌搜索它,但到目前为止还没有运气。
如果您的图像尺寸很大,那么您必须首先缩小到小尺寸,然后通过 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的位图库的压缩方法将压缩后的图像流式传输到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
而没有太多可见的变形。
如果失败,请从比例矩阵创建缩放位图:此处的文档。这会减少创建时位图的宽度和高度,这显然会减少请求大小。
希望这可以帮助。