diff --git a/src/main/java/eu/siacs/conversations/persistance/FileBackend.java b/src/main/java/eu/siacs/conversations/persistance/FileBackend.java index 3382aa1643710fee9e5905a0842f7d27fe1bb616..cad3789a8d451c4a1e5f5d6c4e84ab9e6bd0c1cd 100644 --- a/src/main/java/eu/siacs/conversations/persistance/FileBackend.java +++ b/src/main/java/eu/siacs/conversations/persistance/FileBackend.java @@ -687,6 +687,18 @@ public class FileBackend { updateFileParams(message); } + public boolean unusualBounds(Uri image) { + try { + BitmapFactory.Options options = new BitmapFactory.Options(); + options.inJustDecodeBounds = true; + BitmapFactory.decodeStream(mXmppConnectionService.getContentResolver().openInputStream(image), null, options); + float ratio = (float) options.outHeight / options.outWidth; + return ratio > (21.0f / 9.0f) || ratio < (9.0f / 21.0f); + } catch (Exception e) { + return false; + } + } + private int getRotation(File file) { return getRotation(Uri.parse("file://" + file.getAbsolutePath())); } diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index ddc9bd6b56c4ca18ed149f6040e57920a511ab00..8d63dc17ad2241669f9c05f954606689421b849c 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -504,7 +504,8 @@ public class XmppConnectionService extends Service { if ("never".equals(compressPictures) || ("auto".equals(compressPictures) && getFileBackend().useImageAsIs(uri)) - || (mimeType != null && mimeType.endsWith("/gif"))) { + || (mimeType != null && mimeType.endsWith("/gif")) + || getFileBackend().unusualBounds(uri)) { Log.d(Config.LOGTAG, conversation.getAccount().getJid().asBareJid() + ": not compressing picture. sending as file"); attachFileToConversation(conversation, uri, mimeType, callback); return;