반응형
1. 이미지를 바이너리로 변환
import 'dart:io';
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:http/http.dart' as http;
class ImageUploader extends StatefulWidget {
@override
_ImageUploaderState createState() => _ImageUploaderState();
}
class _ImageUploaderState extends State<ImageUploader> {
File? _image;
Future<void> _pickImage() async {
final picker = ImagePicker();
final pickedFile = await picker.pickImage(source: ImageSource.gallery);
if (pickedFile != null) {
setState(() {
_image = File(pickedFile.path);
});
}
}
Future<void> _uploadImage() async {
if (_image == null) return;
// 이미지 파일을 바이너리로 변환
final bytes = await _image!.readAsBytes();
final base64Image = base64Encode(bytes);
// API 호출
final response = await http.post(
Uri.parse('http://your-api-url.com/upload'),
headers: {'Content-Type': 'application/json'},
body: jsonEncode({'image': base64Image}),
);
if (response.statusCode == 200) {
print('Image uploaded successfully!');
} else {
print('Failed to upload image: ${response.body}');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Image Uploader')),
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
_image != null ? Image.file(_image!) : Text('No image selected'),
ElevatedButton(
onPressed: _pickImage,
child: Text('Pick Image'),
),
ElevatedButton(
onPressed: _uploadImage,
child: Text('Upload Image'),
),
],
),
);
}
}
2. 바이너리를 이미지로 변환
import 'dart:typed_data';
import 'package:flutter/material.dart';
class BinaryToImage extends StatelessWidget {
// 예제용 바이너리 데이터 (서버에서 가져온 데이터가 이와 비슷한 형태로 제공됨)
final Uint8List binaryData;
BinaryToImage({required this.binaryData});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Binary to Image')),
body: Center(
child: binaryData.isNotEmpty
? Image.memory(binaryData) // 바이너리 데이터를 이미지로 표시
: Text('No image data'),
),
);
}
}
void main() {
runApp(MaterialApp(
home: BinaryToImage(
// 테스트용으로 Base64에서 변환한 Uint8List 데이터 전달
binaryData: Uint8List.fromList(
[137, 80, 78, 71, /* ... PNG 파일의 바이너리 데이터 */],
),
),
));
}
반응형
'Flutter & Dart' 카테고리의 다른 글
[Flutter] 파일 뷰어를 만들어보자 [power_file_viewer_v2] (1) | 2025.08.14 |
---|---|
[Flutter] Flutter와 Dart에서 유용한 함수 정리 (0) | 2025.07.08 |
[Flutter] Flutter 에서 MS-SQL 사용자정의테이블 저장하기 (0) | 2024.11.26 |
[Flutter]플러터 DataTable 응용하기 RxList를 DataTable에 넣기 (0) | 2024.11.26 |
[Flutter]플러터 Datatable 사용하기 (0) | 2024.11.21 |