Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/animeng/flutter_export_video_frame
Export picture from video file
https://github.com/animeng/flutter_export_video_frame
album android flutter frames image ios video
Last synced: 4 months ago
JSON representation
Export picture from video file
- Host: GitHub
- URL: https://github.com/animeng/flutter_export_video_frame
- Owner: animeng
- License: mit
- Created: 2019-05-01T06:53:55.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2022-02-19T07:42:12.000Z (almost 3 years ago)
- Last Synced: 2023-08-20T21:55:50.622Z (over 1 year ago)
- Topics: album, android, flutter, frames, image, ios, video
- Language: Java
- Size: 197 KB
- Stars: 15
- Watchers: 3
- Forks: 17
- Open Issues: 8
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# Export Video frame for Flutter
A Flutter plugin for iOS and Android for exporting picture from video file.
## Installation
add ```export_video_frame``` as a dependency in your pubspec.yaml file.
## Usage
```dart
/// Returns whether clean success
static Future cleanImageCache() async {
final String result = await _channel.invokeMethod('cleanImageCache');
if (result == "success") {
return true;
}
return false;
}/// Save image to album
///
/// - parameters:
/// - file: file of video
/// - albumName: save the album name
/// - waterMark:assetName "images/water_mark.png"
/// - alignment: [0,0]represents the center of the rectangle.
/// from -1.0 to +1.0 is the distance from one side of the rectangle to the other side of the rectangle.
/// Default value [1,1] repesent right bottom
/// - scale: the scale ratio with respect water image size.Default value is 1.0
/// Returns whether save success
static Future saveImage(File file, String albumName,{String waterMark,Alignment alignment,double scale}) async {
Map para = {"filePath":file.path,"albumName":albumName};
if (waterMark != null) {
para.addAll({"waterMark":waterMark});
if (alignment != null) {
para.addAll({"alignment":{"x":alignment.x,"y":alignment.y}});
} else {
para.addAll({"alignment":{"x":1,"y":1}});
}
if (scale != null) {
para.addAll({"scale":scale});
} else {
para.addAll({"scale":1.0});
}
}
final bool result =
await _channel.invokeMethod('saveImage', para);
return result;
}/// Returns the file list of the exporting image
///
/// - parameters:
/// - filePath: file path of video
/// - number: export the number of frames
/// - quality: scale of export frame."0" is lowest,"1" is origin.("0" is scale for 0.1 in android)
static Future> exportImage(String filePath, int number,double quality) async {
var para = {"filePath":filePath,"number":number,"quality":quality};
final List list =
await _channel.invokeMethod('exportImage', para);
var result = list
.cast()
.map((path) => File.fromUri(Uri.file(path)))
.toList();
return result;
}/// Returns the file list of the exporting image
///
/// - parameters:
/// - file: file of video
/// - duration: export the duration of frames
/// - radian: rotation the frame ,which will export frame.Rotation is clockwise.
static Future exportImageBySeconds(File file, Duration duration,double radian) async {
var milli = duration.inMilliseconds;
var para = {"filePath":file.path,"duration":milli,"radian":radian};
final String path = await _channel
.invokeMethod('exportImageBySeconds', para);
try {
var result = File.fromUri(Uri.file(path));
return result;
} catch (e) {
throw e;
}
}/// Returns the file list of the exporting frame for gif file
///
/// - parameters:
/// - filePath: file path of video
/// - quality: scale of export frame."0" is lowest,"1" is origin.("0" is scale for 0.1 in android)
static Future> exportGifImage(String filePath, double quality) async {
var para = {"filePath":filePath,"quality":quality};
final List list =
await _channel.invokeMethod('exportGifImagePathList', para);
var result = list
.cast()
.map((path) => File.fromUri(Uri.file(path)))
.toList();
return result;
}```
### ios
If there will be an error when compile ios app.Because flutter use swift is 4.0.
located in ios/Podfile
Edit your Podfile as follows:``` ruby
target 'Runner' do
use_frameworks! # <--- add this
...
endpost_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['ENABLE_BITCODE'] = 'NO'
config.build_settings['SWIFT_VERSION'] = '4.2' # <--- add this
end
end
end```
If you use saveAblum api,you need add the add the following keys to your Info.plist file, located ios/Runner/Info.plist:
```xml
NSPhotoLibraryUsageDescription
Use Ablum For your purpose```
### Android
Make sure you add the needed permissions to your Android Manifest Permission.
``` gradle
```
[Example Demo](https://pub.dev/packages/export_video_frame#-example-tab-)