Media Picker Plus
A comprehensive Flutter plugin for media selection with advanced processing capabilities. Pick images, videos, and files from gallery or camera with built-in watermarking, resizing, and quality control features.
📚 Documentation
For complete documentation, guides, and API reference, visit:
👉 https://thanhtunguet.github.io/media_picker_plus
🚀 Features
- Media Selection: Pick images and videos from gallery or capture using camera
- File Picking: Select files with extension filtering
- Multiple Selection: Pick multiple images, videos, or files at once
- Advanced Processing:
- Image resizing with aspect ratio preservation
- Media cropping with aspect ratio control and freeform options
- Interactive cropping UI for manual crop selection
- Quality control for images and videos
- Watermarking with customizable position and font size
- Permission Management: Smart permission handling for camera and gallery access
- Cross-Platform: Full support for Android, iOS, macOS, and Web
- FFmpeg Integration: Advanced video processing capabilities
✅ Platform Support
| Feature | Android | iOS | Web | macOS |
|---|---|---|---|---|
| Pick image | ✅ | ✅ | ✅ | ✅ |
| Capture image | ✅ | ✅ | ✅ | ✅ |
| Crop image | ✅ | ✅ | ✅ | ✅ |
| Resize image | ✅ | ✅ | ✅ | ✅ |
| Watermark image | ✅ | ✅ | ✅ | ✅ |
| Pick video | ✅ | ✅ | ✅ | ✅ |
| Capture video | ✅ | ✅ | ✅ | ✅ |
| Watermark video | ✅ | ✅ | ⚠️* | ✅ |
| Video thumbnail | ✅ | ✅ | ✅ | ✅ |
| Video compression | ✅ | ✅ | ❌** | ✅ |
* Video watermarking on web requires optional FFmpeg.js setup
** Video compression not yet implemented for web platform
📋 Requirements
- Flutter SDK:
>= 2.5.0 - Dart SDK:
>= 2.17.0 < 4.0.0 - Android: API 21+ (Android 5.0+)
- iOS: iOS 11.0+
- macOS: macOS 11.0+
- Web: Modern browsers with HTML5 support
🔧 Installation
Add this to your pubspec.yaml:
dependencies:
media_picker_plus: ^1.1.0-rc.4
Or install via command line:
flutter pub add media_picker_plus
⚡ Quick Start
import 'package:media_picker_plus/media_picker_plus.dart';
// Pick an image from gallery
final result = await MediaPickerPlus.pickImage(
source: MediaSource.gallery,
);
if (result != null) {
print('Image path: ${result.path}');
}
For detailed usage examples, platform-specific setup, and API documentation, visit the official documentation site.
📖 Usage Examples
Pick Image
String? imagePath = await MediaPickerPlus.pickImage(
source: MediaSource.gallery,
);
Capture Photo
String? imagePath = await MediaPickerPlus.pickImage(
source: MediaSource.camera,
);
Pick Video
String? videoPath = await MediaPickerPlus.pickVideo(
source: MediaSource.gallery,
);
Advanced Features
For examples of cropping, watermarking, video compression, and more advanced features, see the documentation.
🔐 Privacy and Security
- All media processing happens locally on the device
- No data is transmitted to external servers
- Temporary files are automatically cleaned up
- Requests minimal necessary permissions
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
🤝 Contributing
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
🌟 Support
If you find this plugin helpful, please consider:
- ⭐ Starring the repository
- 🐛 Reporting bugs
- 💡 Suggesting new features
- 📝 Contributing to documentation
For support, please open an issue on GitHub.
Made with ❤️ by thanhtunguet
Libraries
- camera_preview_controller
- camera_preview_web
- crop_helper
- crop_options
- crop_ui
- media_options
- media_picker_plus
- media_picker_plus_method_channel
- media_picker_plus_platform_interface
- media_picker_plus_plugin
- media_picker_plus_web
- media_source
- media_type
- video_compression_options
- watermark_position
- web_camera_preview