Я использую GalleryIntent
, чтобы выбрать изображение из галереи, и после этого я кодирую это image to Base64
, но в этом процессе после кодирования изображения в Base64 я увидел, что изображение повернуто до 90 degree
.
Вот мой код: -
public class ImagePickerModule extends ReactContextBaseJavaModule {
private static final int IMAGE_PICKER_REQUEST = 121;
private static final String E_ACTIVITY_DOES_NOT_EXIST = "E_ACTIVITY_DOES_NOT_EXIST";
private static final String E_PICKER_CANCELLED = "E_PICKER_CANCELLED";
private static final String E_FAILED_TO_SHOW_PICKER = "E_FAILED_TO_SHOW_PICKER";
private static final String E_NO_IMAGE_DATA_FOUND = "E_NO_IMAGE_DATA_FOUND";
private Promise mPickerPromise;
private final ActivityEventListener mActivityEventListener = new BaseActivityEventListener() {
@Override
public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent intent) {
if (requestCode == IMAGE_PICKER_REQUEST) {
if (mPickerPromise != null) {
if (resultCode == Activity.RESULT_CANCELED) {
mPickerPromise.reject(E_PICKER_CANCELLED, "Cancelled");
} else if (resultCode == Activity.RESULT_OK) {
Uri uri = intent.getData();
if (uri == null) {
mPickerPromise.reject(E_NO_IMAGE_DATA_FOUND, "Cancelled");
} else {
mPickerPromise.resolve(uri.toString());
}
}
mPickerPromise = null;
}
}
}
};
@ReactMethod
public String encodeImage(String url, final Promise promise) {
Uri uri = Uri.parse(url);
byte[] b;
InputStream imageStream;
try {
imageStream = getReactApplicationContext().getContentResolver().openInputStream(uri);
final Bitmap image = BitmapFactory.decodeStream(imageStream);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.JPEG, 40, baos);
b = baos.toByteArray();
try {
promise.resolve(Base64.encodeToString(b, Base64.DEFAULT));
image.recycle();
} catch (OutOfMemoryError e) {
Log.e("OutOfMemoryError", "encodeImage: e");
} catch (RuntimeException err) {
Log.e("RuntimeException", "encodeImage: e");
}
} catch (Exception e) {
promise.reject("File Not Found Exception", "File not Found");
e.printStackTrace();
}
return url;
}
ImagePickerModule(ReactApplicationContext reactContext) {
super(reactContext);
reactContext.addActivityEventListener(mActivityEventListener);
}
@NonNull
@Override
public String getName() {
return "ImagePicker";
}
@ReactMethod
public void pickImage(final Promise promise) {
Activity currentActivity = getCurrentActivity();
if (currentActivity == null) {
promise.reject(E_ACTIVITY_DOES_NOT_EXIST, "Activity doesn't exist");
return;
}
if (ContextCompat.checkSelfPermission(currentActivity, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(currentActivity, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}, 101);
}
// Store the promise to resolve/reject when picker returns data
mPickerPromise = promise;
try {
final Intent galleryIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
currentActivity.startActivityForResult(galleryIntent, IMAGE_PICKER_REQUEST);
} catch (Exception e) {
mPickerPromise.reject(E_FAILED_TO_SHOW_PICKER, e);
mPickerPromise = null;
}
}
}
Я использую это как собственный модуль в моем собственном проекте реакции. Я пытался таким образом Android получить изображение из галереи повернуло
, но это мне не помогло.
Если кто-нибудь знает решение, то помогите мне. Заранее спасибо:)