No Description

RNThumbnailModule.java 2.5KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package com.reactlibrary;
  2. import com.facebook.react.bridge.ReactApplicationContext;
  3. import com.facebook.react.bridge.ReactContextBaseJavaModule;
  4. import com.facebook.react.bridge.ReactMethod;
  5. import com.facebook.react.bridge.Callback;
  6. import com.facebook.react.bridge.Promise;
  7. import com.facebook.react.bridge.Arguments;
  8. import com.facebook.react.bridge.WritableMap;
  9. import android.media.ThumbnailUtils;
  10. import android.provider.MediaStore;
  11. import android.provider.MediaStore.Video.Thumbnails;
  12. import android.graphics.Bitmap;
  13. import android.os.Environment;
  14. import android.util.Log;
  15. import android.media.MediaMetadataRetriever;
  16. import java.util.UUID;
  17. import java.io.File;
  18. import java.io.OutputStream;
  19. import java.io.FileOutputStream;
  20. public class RNThumbnailModule extends ReactContextBaseJavaModule {
  21. private final ReactApplicationContext reactContext;
  22. public RNThumbnailModule(ReactApplicationContext reactContext) {
  23. super(reactContext);
  24. this.reactContext = reactContext;
  25. }
  26. @Override
  27. public String getName() {
  28. return "RNThumbnail";
  29. }
  30. @ReactMethod
  31. public void get(String filePath, Promise promise) {
  32. filePath = filePath.replace("file://","");
  33. MediaMetadataRetriever retriever = new MediaMetadataRetriever();
  34. retriever.setDataSource(filePath);
  35. Bitmap image = retriever.getFrameAtTime(1000000, MediaMetadataRetriever.OPTION_CLOSEST_SYNC);
  36. String fullPath = Environment.getExternalStorageDirectory().getAbsolutePath() + '/thumb';
  37. try {
  38. File dir = new File(fullPath);
  39. if (!dir.exists()) {
  40. dir.mkdirs();
  41. }
  42. OutputStream fOut = null;
  43. // String fileName = "thumb-" + UUID.randomUUID().toString() + ".jpeg";
  44. String fileName = "thumb-" + UUID.randomUUID().toString() + ".jpeg";
  45. File file = new File(fullPath, fileName);
  46. file.createNewFile();
  47. fOut = new FileOutputStream(file);
  48. // 100 means no compression, the lower you go, the stronger the compression
  49. image.compress(Bitmap.CompressFormat.JPEG, 100, fOut);
  50. fOut.flush();
  51. fOut.close();
  52. // MediaStore.Images.Media.insertImage(reactContext.getContentResolver(), file.getAbsolutePath(), file.getName(), file.getName());
  53. WritableMap map = Arguments.createMap();
  54. map.putString("path", "file://" + fullPath + '/' + fileName);
  55. map.putDouble("width", image.getWidth());
  56. map.putDouble("height", image.getHeight());
  57. promise.resolve(map);
  58. } catch (Exception e) {
  59. Log.e("E_RNThumnail_ERROR", e.getMessage());
  60. promise.reject("E_RNThumnail_ERROR", e);
  61. }
  62. }
  63. }