我实现了捕获图像并将其发送到服务器的功能。

如果我以人像模式拍摄照片并将其发送到服务器,则照片始终向左旋转90度
但是,如果我在水平模式下重复此操作,则一切正常。

所以,我想出了一个主意
我把图片变成了位图对象,得到了宽度和高度。
我不愿意做的就是在将图片发送到服务器之前将图片旋转90度(当我尝试使用纵向模式时)
但是,它从来没有用过(纵向模式的图片在宽度上也有更多像素……)

谁能给我一些提示?

private void call_camera(){
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(intent, PICK_FROM_CAMERA);
}


这用于调用相机功能。

public void onActivityResult(int requestCode, int resultCode, Intent data){
    super.onActivityResult(requestCode, resultCode, data);

    if(resultCode != RESULT_OK)
        return;

    if(requestCode == PICK_FROM_CAMERA){

        imageUri = data.getData();
        Log.d("메시지", "uri = "+imageUri);


        Cursor c = this.getContentResolver().query(imageUri, null, null, null, null);
        c.moveToNext();
        absolutePath = c.getString(c.getColumnIndex(MediaStore.MediaColumns.DATA));
    }
}


我通过使用absolutePath制作了一个File对象
然后将其发送到服务器。

fileInputStream = new FileInputStream(file);
        int bytesAvailable = fileInputStream.available();
        int maxBufferSize = 1024;
        int bufferSize = Math.min(bytesAvailable, maxBufferSize);
        byte[] buffer = new byte[bufferSize];

        int bytesRead = fileInputStream.read(buffer, 0, bufferSize);
        while (bytesRead > 0) {

        DataOutputStream dataWrite = new     DataOutputStream(con.getOutputStream());
            dataWrite.write(buffer, 0, bufferSize);
            bytesAvailable = fileInputStream.available();
            bufferSize = Math.min(bytesAvailable, maxBufferSize);
            bytesRead = fileInputStream.read(buffer, 0, bufferSize);
        }
        fileInputStream.close();

        wr.writeBytes("\r\n--" + boundary + "--\r\n");
        wr.flush();

最佳答案

尝试以下方法

private Bitmap fixOrientation(Bitmap bitmap) {
    ExifInterface ei = null;
    Bitmap selectedBitmap;
    try {
        ei = new ExifInterface(mCurrentPhotoPath);
    } catch (IOException e) {
        e.printStackTrace();
    }
    int orientation = ei.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);

    switch (orientation) {
        case ExifInterface.ORIENTATION_ROTATE_90:
            selectedBitmap = rotateImage(bitmap, 90);
            break;
        case ExifInterface.ORIENTATION_ROTATE_180:
            selectedBitmap = rotateImage(bitmap, 180);
            break;
        case ExifInterface.ORIENTATION_ROTATE_270:
            selectedBitmap = rotateImage(bitmap, 270);
            break;
        case ExifInterface.ORIENTATION_NORMAL:
            selectedBitmap = bitmap;
            break;
        default:
            selectedBitmap = bitmap;
    }
return selectedBitmap;
}

10-06 09:43