From cd44e5fd66023f3563002b7ef4cf59a086c5c773 Mon Sep 17 00:00:00 2001 From: FongMi Date: Tue, 6 Jun 2023 22:47:40 +0800 Subject: [PATCH] Optimize wallpaper crop --- .../java/com/fongmi/android/tv/Product.java | 19 ------------ .../com/fongmi/android/tv/api/WallConfig.java | 4 +-- .../com/fongmi/android/tv/utils/ImgUtil.java | 31 +++++++++++++++++++ .../java/com/fongmi/android/tv/Product.java | 26 ---------------- 4 files changed, 33 insertions(+), 47 deletions(-) diff --git a/app/src/leanback/java/com/fongmi/android/tv/Product.java b/app/src/leanback/java/com/fongmi/android/tv/Product.java index 335f115eb..fd375c1a5 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/Product.java +++ b/app/src/leanback/java/com/fongmi/android/tv/Product.java @@ -1,15 +1,9 @@ package com.fongmi.android.tv; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Matrix; - import com.fongmi.android.tv.ui.activity.LiveActivity; import com.fongmi.android.tv.utils.Prefers; import com.fongmi.android.tv.utils.ResUtil; -import java.io.ByteArrayOutputStream; - public class Product { public static int getDeviceType() { @@ -27,17 +21,4 @@ public class Product { public static int getEms() { return Math.min(ResUtil.getScreenWidth() / ResUtil.sp2px(24), 35); } - - public static byte[] resize(byte[] bytes) { - int width = ResUtil.getScreenWidth(); - int height = ResUtil.getScreenHeight(); - Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); - if (bitmap.getWidth() < width && bitmap.getHeight() < height) return bytes; - Matrix matrix = new Matrix(); - matrix.postScale((float) width / bitmap.getWidth(), (float) height / bitmap.getHeight()); - bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, false); - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); - return baos.toByteArray(); - } } diff --git a/app/src/main/java/com/fongmi/android/tv/api/WallConfig.java b/app/src/main/java/com/fongmi/android/tv/api/WallConfig.java index 2f94e0cb5..97b3d3a50 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/WallConfig.java +++ b/app/src/main/java/com/fongmi/android/tv/api/WallConfig.java @@ -4,12 +4,12 @@ import android.graphics.drawable.Drawable; import android.text.TextUtils; import com.fongmi.android.tv.App; -import com.fongmi.android.tv.Product; import com.fongmi.android.tv.R; import com.fongmi.android.tv.bean.Config; import com.fongmi.android.tv.event.RefreshEvent; import com.fongmi.android.tv.impl.Callback; import com.fongmi.android.tv.utils.FileUtil; +import com.fongmi.android.tv.utils.ImgUtil; import com.fongmi.android.tv.utils.Prefers; import com.github.catvod.net.OkHttp; @@ -92,7 +92,7 @@ public class WallConfig { private File write(File file) throws IOException { if (getUrl().startsWith("file")) FileUtil.copy(FileUtil.getLocal(getUrl()), file); - else if (getUrl().startsWith("http")) FileUtil.write(file, Product.resize(OkHttp.newCall(getUrl()).execute().body().bytes())); + else if (getUrl().startsWith("http")) FileUtil.write(file, ImgUtil.resize(OkHttp.newCall(getUrl()).execute().body().bytes())); else file.delete(); return file; } diff --git a/app/src/main/java/com/fongmi/android/tv/utils/ImgUtil.java b/app/src/main/java/com/fongmi/android/tv/utils/ImgUtil.java index 12332aa07..22cd0fd18 100644 --- a/app/src/main/java/com/fongmi/android/tv/utils/ImgUtil.java +++ b/app/src/main/java/com/fongmi/android/tv/utils/ImgUtil.java @@ -1,6 +1,9 @@ package com.fongmi.android.tv.utils; import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Canvas; +import android.graphics.RectF; import android.text.TextUtils; import android.view.View; import android.widget.ImageView; @@ -18,6 +21,8 @@ import com.bumptech.glide.signature.ObjectKey; import com.fongmi.android.tv.App; import com.fongmi.android.tv.R; +import java.io.ByteArrayOutputStream; + public class ImgUtil { public static void load(String url, ImageView view) { @@ -59,6 +64,32 @@ public class ImgUtil { return new GlideUrl(param == null ? url : url.split("@")[0], builder.build()); } + public static byte[] resize(byte[] bytes) { + Bitmap bitmap = crop(BitmapFactory.decodeByteArray(bytes, 0, bytes.length)); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); + return baos.toByteArray(); + } + + private static Bitmap crop(Bitmap source) { + int newWidth = ResUtil.getScreenWidth(); + int newHeight = ResUtil.getScreenHeight(); + int sourceWidth = source.getWidth(); + int sourceHeight = source.getHeight(); + float xScale = (float) newWidth / sourceWidth; + float yScale = (float) newHeight / sourceHeight; + float scale = Math.max(xScale, yScale); + float scaledWidth = scale * sourceWidth; + float scaledHeight = scale * sourceHeight; + float left = (newWidth - scaledWidth) / 2; + float top = (newHeight - scaledHeight) / 2; + RectF rectF = new RectF(left, top, left + scaledWidth, top + scaledHeight); + Bitmap dest = Bitmap.createBitmap(newWidth, newHeight, source.getConfig()); + Canvas canvas = new Canvas(dest); + canvas.drawBitmap(source, null, rectF, null); + return dest; + } + private static RequestListener getListener(ImageView view) { return getListener(view, ImageView.ScaleType.CENTER); } diff --git a/app/src/mobile/java/com/fongmi/android/tv/Product.java b/app/src/mobile/java/com/fongmi/android/tv/Product.java index 906c06df9..067ecf409 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/Product.java +++ b/app/src/mobile/java/com/fongmi/android/tv/Product.java @@ -1,15 +1,10 @@ package com.fongmi.android.tv; import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Matrix; import com.fongmi.android.tv.utils.Prefers; import com.fongmi.android.tv.utils.ResUtil; -import java.io.ByteArrayOutputStream; - public class Product { public static int getDeviceType() { @@ -33,25 +28,4 @@ public class Product { int height = (int) (width / 0.75f); return new int[]{width, height}; } - - public static byte[] resize(byte[] bytes) { - Bitmap bitmap = crop(BitmapFactory.decodeByteArray(bytes, 0, bytes.length)); - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); - return baos.toByteArray(); - } - - private static Bitmap crop(Bitmap bitmap) { - int width = ResUtil.getScreenWidth(); - int height = ResUtil.getScreenHeight(); - if (bitmap.getWidth() < width && bitmap.getHeight() < height) { - return bitmap; - } else if (bitmap.getWidth() >= bitmap.getHeight() && width < height) { - return Bitmap.createBitmap(bitmap, bitmap.getWidth() / 2 - bitmap.getHeight() / 2, 0, bitmap.getHeight(), bitmap.getHeight()); - } else { - Matrix matrix = new Matrix(); - matrix.postScale((float) width / bitmap.getWidth(), (float) height / bitmap.getHeight()); - return Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, false); - } - } }