我实现了捕获图像并将其发送到服务器的功能。
如果我以人像模式拍摄照片并将其发送到服务器,则照片始终向左旋转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;
}