1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
-
- package me.hauvo.thumbnail;
-
- import com.facebook.react.bridge.ReactApplicationContext;
- import com.facebook.react.bridge.ReactContextBaseJavaModule;
- import com.facebook.react.bridge.ReactMethod;
- import com.facebook.react.bridge.Callback;
- import com.facebook.react.bridge.Promise;
- import com.facebook.react.bridge.Arguments;
- import com.facebook.react.bridge.WritableMap;
- import android.media.ThumbnailUtils;
- import android.provider.MediaStore;
- import android.provider.MediaStore.Video.Thumbnails;
- import android.graphics.Bitmap;
- import android.os.Environment;
- import android.util.Log;
- import android.media.MediaMetadataRetriever;
- import android.graphics.Matrix;
-
- import java.util.UUID;
- import java.io.File;
- import java.io.OutputStream;
- import java.io.FileOutputStream;
-
-
- public class RNThumbnailModule extends ReactContextBaseJavaModule {
-
- private final ReactApplicationContext reactContext;
-
- public RNThumbnailModule(ReactApplicationContext reactContext) {
- super(reactContext);
- this.reactContext = reactContext;
- }
-
- @Override
- public String getName() {
- return "RNThumbnail";
- }
-
- @ReactMethod
- public void get(String filePath, Promise promise) {
- filePath = filePath.replace("file://","");
- MediaMetadataRetriever retriever = new MediaMetadataRetriever();
- retriever.setDataSource(filePath);
- Bitmap image = retriever.getFrameAtTime(1000000, MediaMetadataRetriever.OPTION_CLOSEST_SYNC);
-
- String fullPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/thumb";
-
- try {
- File dir = new File(fullPath);
- if (!dir.exists()) {
- dir.mkdirs();
- }
-
- OutputStream fOut = null;
- // String fileName = "thumb-" + UUID.randomUUID().toString() + ".jpeg";
- String fileName = "thumb-" + UUID.randomUUID().toString() + ".jpeg";
- File file = new File(fullPath, fileName);
- file.createNewFile();
- fOut = new FileOutputStream(file);
-
- // 100 means no compression, the lower you go, the stronger the compression
- image.compress(Bitmap.CompressFormat.JPEG, 100, fOut);
- fOut.flush();
- fOut.close();
-
- // MediaStore.Images.Media.insertImage(reactContext.getContentResolver(), file.getAbsolutePath(), file.getName(), file.getName());
-
- WritableMap map = Arguments.createMap();
-
- map.putString("path", "file://" + fullPath + '/' + fileName);
- map.putDouble("width", image.getWidth());
- map.putDouble("height", image.getHeight());
-
- promise.resolve(map);
-
- } catch (Exception e) {
- Log.e("E_RNThumnail_ERROR", e.getMessage());
- promise.reject("E_RNThumnail_ERROR", e);
- }
- }
- }
|