Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- R프로그래밍
- CSS사용법
- Exception
- Android Apk 이름 변경
- FLUTTER
- fragment
- spring
- android error
- apache gzip
- java error
- error
- Program type already present
- css
- Android Apk 이름
- JavaScript
- Android
- Android Apk
- html
- Firebase
- Java
- DataTable
- Kotlin
- MySQL
- Eclipse
- jQuery
- release unsigned
- tomcat
- android fragment
- 안드로이드
- release Apk
Archives
- Today
- Total
selfstarter
Android image 저장 본문
android의 공용path에 image 저장
1) Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM) 으로 DCIM 폴더 위치 가져오기. 여기서 내가 생성할 폴더 이름을 추가하고 폴더를 생성한다.(DCIM폴더는 사진, 동영상을 저장하는 폴더)
2) 파일 객체를 생성하고 파일이름이 중복되었는지 체크한다. 중복이라면 실패
3) 파일에 쓸 output Stream을 생성
4) bitmap을 resize해서 새로운 bitmap을 만든다
5) compress함수로 bitmap을 PNG로 변경하고 결과를 output stream에 저장한다,
6) output stream을 닫는다
지금 확인해보니 이미지가 엄청 깨지는건 이미지 resize일 때 문제였다. 수정필요..
public boolean saveImage(Bitmap bitmap, String saveImageName) {
String saveDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).toString()+ "/directoryName";
File file = new File(saveDir);
if (!file.exists()) {
file.mkdir();
}
String fileName = saveImageName + ".png";
File tempFile = new File(saveDir, fileName);
FileOutputStream output = null;
try {
if (tempFile.createNewFile()) {
output = new FileOutputStream(tempFile);
// 이미지 줄이기
// TODO : 사진 비율로 압축하도록 수정할 것
Bitmap newBitmap = bitmap.createScaledBitmap(bitmap, 200, 200, true);
// 이미지 압축. 압축된 파일은 output stream에 저장. 2번째 인자는 압축률인데 100으로 해도 많이 깨진다..
newBitmap.compress(Bitmap.CompressFormat.PNG, 100, output);
} else {
// 같은 이름의 파일 존재
Log.d("TEST_LOG", "같은 이름의 파일 존재:"+saveImageName);
return false;
}
} catch (FileNotFoundException e) {
Log.d("TEST_LOG", "파일을 찾을 수 없음");
return false;
} catch (IOException e) {
Log.d("TEST_LOG", "IO 에러");
e.printStackTrace();
return false;
} finally {
if (output != null) {
try {
output.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return true;
}
saveImage 함수는 이렇게 호출한다
imageSaveBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (imageView == null) {
return;
}
saveImage(((BitmapDrawable) imageView.getDrawable()).getBitmap(), simpleDateFormat.format(new Date()));
}
});
'App > Android' 카테고리의 다른 글
Android Glide Library사용법 (0) | 2020.07.31 |
---|---|
Android Camera2 (0) | 2020.07.25 |
갤러리에 이미지 저장 (0) | 2020.07.22 |
Android Image Path 가져오기 (0) | 2020.07.21 |
Android Spinner 사용법 (0) | 2020.07.17 |
Comments