我实现了一个捕获图像并将其发送到服务器的函数。
如果我以纵向模式拍照然后将其发送到服务器,则图像始终向左旋转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();
答案 0 :(得分:1)
尝试以下方法
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;
}