0

在我当前的应用程序中,我将图片发送到我的服务器。现在我的问题是这些图片有时太大了。在将图片发送到服务器之前缩小图片大小的最佳方法是什么。目前,我将图片的 URI 存储在数据库中(/mnt/sdcard/DCIM/SF.png)并将其发送到服务器。我想缩小图像的分辨率,以便它需要更少量的磁盘空间。有没有办法在android中转换图像?

有人可以帮助我如何以一种好的方式解决这个问题吗?

谢谢

4

2 回答 2

0

要将图像发送到服务器,您可以对其进行编码,Base64然后将 Base64 编码的字符串发送到服务器...android中的 base64 类不支持编码,因此您必须下载 Bae64 java 类文件...您在这里获取它http://iharder.sourceforge.net/current/java/base64/ 之后它非常简单。例如

Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(),

R.drawable.YOURIMAGE);
ByteArrayOutputStream bao = new ByteArrayOutputStream();

bitmapOrg.compress(Bitmap.CompressFormat.JPEG, 90, bao);

byte [] ba = bao.toByteArray();

String encodedstring=Base64.encodeBytes(ba);

然后将编码字符串作为普通名称值对发送

这个链接给出了一个很好的例子http://blog.sptechnolab.com/2011/03/09/android/android-upload-image-to-server/

于 2013-07-05T09:20:35.713 回答
0

我使用以下代码将图像发送到服务器,这里我将图像转换为字节数组。首先,您需要从 URI 解码图像,然后将位图转换为字节数组。

从 URI 解码位图:

Bitmap imageToSend= decodeBitmap("Your URI");

解码URI的方法

Bitmap getPreview(URI uri) {
    File image = new File(uri);
    BitmapFactory.Options bounds = new BitmapFactory.Options();
    bounds.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(image.getPath(), bounds);
    if ((bounds.outWidth == -1) || (bounds.outHeight == -1))
        return null;
    int originalSize = (bounds.outHeight > bounds.outWidth) ? bounds.outHeight
            : bounds.outWidth;
    BitmapFactory.Options opts = new BitmapFactory.Options();
    opts.inSampleSize = originalSize / THUMBNAIL_SIZE;
    return BitmapFactory.decodeFile(image.getPath(), opts);     
}

将图像发送到服务器的代码

try {


            ByteArrayOutputStream bosRight = new ByteArrayOutputStream();
            imageToSend.compress(CompressFormat.JPEG, 100, bosRight);
            byte[] dataRight = bosRight.toByteArray();
            HttpClient httpClient = new DefaultHttpClient();
            HttpPost postRequest = new HttpPost("url to send");
            ByteArrayBody babRight = new ByteArrayBody(dataRight,
                    "ImageName.jpg");
            MultipartEntity reqEntity = new MultipartEntity(
                    HttpMultipartMode.BROWSER_COMPATIBLE);
            reqEntity.addPart("params", babRight);
            postRequest.setEntity(reqEntity);
            HttpResponse response = httpClient.execute(postRequest);
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    response.getEntity().getContent(), "UTF-8"));
            String sResponse;
            StringBuilder s = new StringBuilder();

            while ((sResponse = reader.readLine()) != null) {
                s = s.append(sResponse);
                Log.v("Response value is", sResponse);
                JSONObject postObj = new JSONObject(sResponse);
                String successTag = postObj.getString("success");
                if (successTag.equals("1")) {
                    imageDeletion();
                } else {

                }
            }
        } catch (Exception e) {
            Log.e(e.getClass().getName(), e.getMessage());
        }
于 2013-07-05T08:45:37.593 回答