No Description

RNThumbnailModule.java 2.6KB

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