Flutter
[Flutter] 카메라 및 사진 불러오기 기능 사용하기 . Part. 2
개발_블로그
2024. 12. 7. 15:24
Part.1 참고 바라겠습니다 .
https://jangstory.tistory.com/169
오늘은 번외로 가져온 이미지의 용량을 줄이는 방법을 포스팅하겠습니다.
0. pubspec.yaml 파일 추가
flutter_image_compress: ^2.3.0
1. 파일 용량 줄이기
1-1. 코드 추가
Future<String?> compressImage(File imageFile) async {
final result = await FlutterImageCompress.compressAndGetFile(
imageFile.absolute.path,
imageFile.absolute.path
.replaceFirst(RegExp(r'\.jpg$'), '_compressed.jpg'),
quality: 85, // 품질 조정
);
return result?.path; // 압축된 이미지 경로 반환
}
1-2. 기존 _pickImage() , _takePhoto() 코드 변경
Future<void> _pickImage() async {
// 권한 요청
var status = await Permission.photos.status;
if (!status.isGranted) {
_showPermissionDeniedAlert(true);
return;
}
// 이미지 선택
final ImagePicker _picker = ImagePicker();
final XFile? pickedFile =
await _picker.pickImage(source: ImageSource.gallery);
if (pickedFile != null) {
String? compressedPath = await compressImage(File(pickedFile.path));
setState(() {
imagePath = compressedPath; // 압축된 이미지의 경로 저장
});
}
}
Future<void> _takePhoto() async {
// 카메라 권한 요청
var status = await Permission.camera.status;
if (!status.isGranted) {
_showPermissionDeniedAlert(false);
return;
}
// 사진 촬영
final ImagePicker _picker = ImagePicker();
final XFile? takenFile =
await _picker.pickImage(source: ImageSource.camera);
if (takenFile != null) {
String? compressedPath = await compressImage(File(takenFile.path));
setState(() {
imagePath = compressedPath; // 압축된 이미지의 경로 저장
});
}
}
2. 이미지 용량 확인하기 .
2-1. 코드 추가
String _formatBytes(int bytes, {int decimalPlaces = 2}) {
if (bytes <= 0) return '0 Bytes';
const units = ['Bytes', 'KB', 'MB', 'GB'];
final i = (log(bytes) / log(1024)).floor();
return '${(bytes / pow(1024, i)).toStringAsFixed(decimalPlaces)} ${units[i]}';
}
2-2. 용량 확인
if (takenFile != null) {
String? compressedPath = await compressImage(File(takenFile.path));
setState(() {
imagePath = compressedPath; // 압축된 이미지의 경로 저장
});
final file = File(compressedPath!);
final sizeInBytes = await file.length();
final imageSize = _formatBytes(sizeInBytes);
print("imageSize $imageSize");
}
이상입니다.