2014-11-29 2 views
2

카메라를 사용하여 이미지를 캡처하는 앱을 만들었습니다. 이미지는 Bitmap으로 신청서에 다시 전달됩니다. Bitmap을 전체 해상도로 JPEG 형식으로 저장하는 코드를 수정하는 방법을 알고 싶습니다.어떻게 사진을 전체 해상도로 android에 저장 하시겠습니까?

FileOutputStream out = new FileOutputStream(file); 
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out); 
out.flush(); 
out.close(); 

나는 Bitmap이 더 작은 크기로 압축되고 있다고 생각합니다!

답변

2

압축이란 이미지를 저장하는 데 필요한 물리적 디스크 공간을 줄이는 것을 말합니다. 자동으로 화질이나 해상도가 저하되는 것은 아닙니다.

JPEG는 (대부분) lossy compression algorithms에 속하는 파일 형식 그룹의 일부입니다. 즉, 이미지의 파일 크기를 줄이기 위해 약간의 작은 이미지 디테일과 품질이 희생되었지만 여전히 이미지의 해상도는 떨어지지 않습니다.

이미지의 파일 크기는 줄이고 화질을 떨어 뜨리지 않으려면 lossless compression을 지원하는 파일 형식을 사용해야합니다. 예를 들어 Bitmap.CompressFormat.PNG을 사용할 수 있습니다.

WEBP는 손실 압축과 손실없는 압축을 모두 지원하며 파일 크기는 PNG 및 JPG보다 작습니다. 그러나 WEBP에 대한 지원은 API 레벨 14에서만 추가되었으므로 하위 호환성 문제가있을 수 있습니다. 가능한 경우 WEBP 만 사용하고, 그렇지 않으면 PNG로 이미지 품질을 신경 써야합니다.

public boolean compress (Bitmap.CompressFormat format, int quality, OutputStream stream) 

당신의 OutputStream을 통과, 당신은 CompressFormat를 선택할 수 있습니다보고 품질을 선택할 수 있습니다으로 : 어떤 경우에


는의가 compress() 방법을 살펴 보자. 품질로 전달하는 숫자는 0에서 100 사이의 숫자 일 수 있으며 손실 또는 손실 여부를 결정합니다. 100을 넘기 때문에 CompressFormat을 선택하더라도 압축은 항상 무손실입니다!

제쳐두고 : PNG는 무손실 압축 만 지원하므로 품질 매개 변수를 완전히 무시하고 항상 품질을 저하시키지 않고 이미지를 저장합니다!

+0

감사합니다. 정말 도움이됩니다. –

+0

내가 도울 수있어서 기쁩니다! –

관련 문제