Android 핸드폰 호출 시스템 카메라 사진, 재단 및 Url 업로드 이미지 얻기
7876 단어 기술
앞말
최근에 한 사람이 회사에서 독자적인 개발을 하는데 문제가 생기면 스스로 해결할 수밖에 없다. 비록 과정이 비교적 험난하지만 수확은 꽤 많다. 한 사람도 강인해야 한다. 최근에 사용자의 프로필 사진을 만드는 데 작은 문제가 생겼다. 비록 지난 앱에 프로필 사진이 올라왔지만 그 중의 작은 문제를 발견했다. 그래서 자신이 다시 고쳤다. 지금 붙여서 여러분과 공유한다.
*제품 수요: 사용자가 사진을 올리든 갤러리에서 사진을 선택하든 정사각형으로 자르고 서버를 업로드한다.
*발생한 문제: 사진이 완성된 후 서버에 업로드된 것은 원래의 그림이고 사진이 인용된 삼방 라이브러리를 선택하면 문제가 없습니다.
솔루션
, , , , :
private void showCameraAction() {
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (hasSdcard()) {
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, FileProvider.getUriForFile(this,
this.getApplicationContext().getPackageName() + ".provider",
new File(Environment.getExternalStorageDirectory(), PHOTO_FILE_NAME)));
}
startActivityForResult(cameraIntent, 110);
}
요청은 마음대로 할 수 있고, 정규로 하는 것이 가장 좋다. (이 110은 비정규적) 여기서 안드로이드 7.0의 문제를 주의하고, 콘텐츠 제공자로 그림을 가져와야 한다.
/**
*
* @param uri
*/
private void crop(Uri uri) {
//
Intent intent = new Intent("com.android.camera.action.CROP");
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setDataAndType(uri, "image/*");
intent.putExtra("crop", "true");
// ,1:1
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
//
intent.putExtra("outputX", 250);
intent.putExtra("outputY", 250);
//
intent.putExtra("outputFormat", "JPEG");
intent.putExtra("noFaceDetection", true);//
intent.putExtra("return-data", true);// true: uri,false: uri
startActivityForResult(intent, 120);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 110&&resultCode==RESULT_OK) {
if (hasSdcard()) {
tempFile = new File(Environment.getExternalStorageDirectory(),
PHOTO_FILE_NAME);
if (tempFile != null) {
crop(FileProvider.getUriForFile(this, this.getApplicationContext().getPackageName() + ".provider", tempFile));
} else {
ToastUtil.showToast(" ");
}
} else {
ToastUtil.showToast(" , !");
}
} else if (requestCode == 120 && data != null &&resultCode==RESULT_OK) {
Bundle extras = data.getExtras();
if (extras != null) {
Bitmap photo = extras.getParcelable("data");
if (photo != null) {
Uri uri = saveBitmap(photo);
//
sendimage(uri.getPath());
} else {
ToastUtil.showToast(" ");
}
} else {
ToastUtil.showToast(" ");
}
}
}
주의: 요청 코드가 100일 때 코드는 되돌아오는 데이터에 대해null인지 아닌지를 판단하지 않습니다. 되돌아오는 데이터가 비어 있기 때문에 재단하는 방법이 실행될 때 그림은 경로에 따라 가져옵니다. 재단하는 리셋에서 데이터의 판단을 해야 합니다.
/**
* Bitmap file Uri
*
* @param bitmap
* @return
*/
private Uri saveBitmap(Bitmap bitmap) {
File file = new File(Environment.getExternalStorageDirectory() + "/image");
if (!file.exists())
file.mkdirs();
File imgFile = new File(file.getAbsolutePath() + PHOTO_FILE_NAME);
if (imgFile.exists())
imgFile.delete();
try {
FileOutputStream outputStream = new FileOutputStream(imgFile);
bitmap.compress(Bitmap.CompressFormat.JPEG, 85, outputStream);
outputStream.flush();
outputStream.close();
Uri uri = Uri.fromFile(imgFile);
return uri;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
우리가 사진을 올리는 것은 아리운oss에 직접 올린 다음에 되돌아오는 링크를 백그라운드에 가져오는 것이기 때문에 반드시 재단 후의 사진 경로를 얻어야 한다. 그래서 먼저 저장하고 경로를 받아서 업로드해야 한다. 구체적으로 업로드된 코드는 붙이지 않는다.
갤러리에 있는 사진을 선택하면 제가 쓰는 세 가지 방법은 여기에 적혀 있습니다. 자신에게 맞는 개원 프로젝트를 찾을 수 있습니다.
총결산
, , , android , , ~~~
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Android 핸드폰 호출 시스템 카메라 사진, 재단 및 Url 업로드 이미지 얻기최근에 한 사람이 회사에서 독자적인 개발을 하는데 문제가 생기면 스스로 해결할 수밖에 없다. 비록 과정이 비교적 험난하지만 수확은 꽤 많다. 한 사람도 강인해야 한다. 최근에 사용자의 프로필 사진을 만드는 데 작은 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.