From 4dc202dbc9c6e59e9f6f195d0b7f8d38314beb74 Mon Sep 17 00:00:00 2001 From: max-klaus Date: Wed, 3 Feb 2021 21:30:43 +0300 Subject: [PATCH] Fix mark / reset --- .../mapcontextmenu/UploadPhotosAsyncTask.java | 40 ++++++++++++++----- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/UploadPhotosAsyncTask.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/UploadPhotosAsyncTask.java index 93010034c0..2cfc70f14e 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/UploadPhotosAsyncTask.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/UploadPhotosAsyncTask.java @@ -28,7 +28,6 @@ import org.openplacereviews.opendb.util.exception.FailedVerificationException; import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; -import java.io.IOException; import java.io.InputStream; import java.lang.ref.WeakReference; import java.util.ArrayList; @@ -102,10 +101,11 @@ public class UploadPhotosAsyncTask extends AsyncTask { private boolean handleSelectedImage(final Uri uri) { boolean success = false; InputStream inputStream = null; + int[] imageDimensions = null; try { inputStream = app.getContentResolver().openInputStream(uri); if (inputStream != null) { - success = uploadImageToPlace(inputStream); + imageDimensions = calcImageDimensions(inputStream); } } catch (Exception e) { LOG.error(e); @@ -113,12 +113,27 @@ public class UploadPhotosAsyncTask extends AsyncTask { } finally { Algorithms.closeStream(inputStream); } + if (imageDimensions != null && imageDimensions.length == 2) { + try { + inputStream = app.getContentResolver().openInputStream(uri); + if (inputStream != null) { + int width = imageDimensions[0]; + int height = imageDimensions[1]; + success = uploadImageToPlace(inputStream, width, height); + } + } catch (Exception e) { + LOG.error(e); + app.showToastMessage(R.string.cannot_upload_image); + } finally { + Algorithms.closeStream(inputStream); + } + } return success; } - private boolean uploadImageToPlace(InputStream image) throws IOException { + private boolean uploadImageToPlace(InputStream image, int width, int height) { boolean success = false; - InputStream serverData = new ByteArrayInputStream(compressImageToJpeg(image)); + InputStream serverData = new ByteArrayInputStream(compressImageToJpeg(image, width, height)); String baseUrl = OPRConstants.getBaseUrl(app); // all these should be constant String url = baseUrl + "api/ipfs/image"; @@ -178,16 +193,18 @@ public class UploadPhotosAsyncTask extends AsyncTask { } } - private byte[] compressImageToJpeg(InputStream image) throws IOException { + private int[] calcImageDimensions(InputStream image) { BufferedInputStream bufferedInputStream = new BufferedInputStream(image); - bufferedInputStream.mark(1024 * 200); BitmapFactory.Options opts = new BitmapFactory.Options(); opts.inJustDecodeBounds = true; BitmapFactory.decodeStream(bufferedInputStream, null, opts); - int w = opts.outWidth; - int h = opts.outHeight; - bufferedInputStream.reset(); - ByteArrayOutputStream os = new ByteArrayOutputStream(); + return new int[] { opts.outWidth, opts.outHeight }; + } + + private byte[] compressImageToJpeg(InputStream image, int width, int height) { + BufferedInputStream bufferedInputStream = new BufferedInputStream(image); + int w = width; + int h = height; boolean scale = false; int divider = 1; while (w > MAX_IMAGE_LENGTH || h > MAX_IMAGE_LENGTH) { @@ -198,12 +215,13 @@ public class UploadPhotosAsyncTask extends AsyncTask { } Bitmap bmp; if (scale) { - opts = new BitmapFactory.Options(); + BitmapFactory.Options opts = new BitmapFactory.Options(); opts.inSampleSize = divider; bmp = BitmapFactory.decodeStream(bufferedInputStream, null, opts); } else { bmp = BitmapFactory.decodeStream(bufferedInputStream); } + ByteArrayOutputStream os = new ByteArrayOutputStream(); bmp.compress(Bitmap.CompressFormat.JPEG, 90, os); return os.toByteArray(); }