From 73097569f525a0479fe51c92b11a5c7cc9c78de0 Mon Sep 17 00:00:00 2001 From: M66B Date: Tue, 14 May 2024 21:30:08 +0200 Subject: [PATCH] OpenAI: scale images --- .../java/eu/faircode/email/ImageHelper.java | 20 +++++++++++-------- .../main/java/eu/faircode/email/OpenAI.java | 15 +++++++++++--- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/ImageHelper.java b/app/src/main/java/eu/faircode/email/ImageHelper.java index a2141753ea..cae2a4b9dd 100644 --- a/app/src/main/java/eu/faircode/email/ImageHelper.java +++ b/app/src/main/java/eu/faircode/email/ImageHelper.java @@ -617,16 +617,20 @@ class ImageHelper { static String getDataUri(File file, String type) throws IOException { try (InputStream is = new FileInputStream(file)) { - byte[] bytes = Helper.readBytes(is); + return getDataUri(is, type); + } + } - StringBuilder sb = new StringBuilder(); - sb.append("data:"); - sb.append(type); - sb.append(";base64,"); - sb.append(Base64.encodeToString(bytes, Base64.NO_WRAP)); + static String getDataUri(InputStream is, String type) throws IOException { + byte[] bytes = Helper.readBytes(is); - return sb.toString(); - } + StringBuilder sb = new StringBuilder(); + sb.append("data:"); + sb.append(type); + sb.append(";base64,"); + sb.append(Base64.encodeToString(bytes, Base64.NO_WRAP)); + + return sb.toString(); } static ByteArrayInputStream getDataUriStream(String source) { diff --git a/app/src/main/java/eu/faircode/email/OpenAI.java b/app/src/main/java/eu/faircode/email/OpenAI.java index 1c46fe0c4e..472638c59c 100644 --- a/app/src/main/java/eu/faircode/email/OpenAI.java +++ b/app/src/main/java/eu/faircode/email/OpenAI.java @@ -21,6 +21,7 @@ package eu.faircode.email; import android.content.Context; import android.content.SharedPreferences; +import android.graphics.Bitmap; import android.net.Uri; import android.text.Spannable; import android.text.TextUtils; @@ -32,6 +33,8 @@ import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; +import java.io.File; +import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; @@ -56,6 +59,7 @@ public class OpenAI { private static final int MAX_OPENAI_LEN = 1000; // characters private static final int TIMEOUT = 45; // seconds + private static final int SCALE2PIXELS = 1440; // medium static boolean isAvailable(Context context) { if (TextUtils.isEmpty(BuildConfig.OPENAI_ENDPOINT)) @@ -261,12 +265,17 @@ public class OpenAI { if (src != null && src.startsWith("cid:")) { String cid = '<' + src.substring(4) + '>'; EntityAttachment attachment = db.attachment().getAttachment(id, cid); - if (attachment != null && attachment.available) - try { - url = ImageHelper.getDataUri(attachment.getFile(context), attachment.type); + if (attachment != null && attachment.available) { + File file = attachment.getFile(context); + try (InputStream is = new FileInputStream(file)) { + Bitmap bm = ImageHelper.getScaledBitmap(is, null, null, SCALE2PIXELS); + Helper.ByteArrayInOutStream bos = new Helper.ByteArrayInOutStream(); + bm.compress(Bitmap.CompressFormat.PNG, 90, bos); + url = ImageHelper.getDataUri(bos.getInputStream(), "image/png"); } catch (Throwable ex) { Log.w(ex); } + } } else url = src;