Optimize wallpaper crop

pull/137/head
FongMi 3 years ago
parent d05fc792bb
commit cd44e5fd66
  1. 19
      app/src/leanback/java/com/fongmi/android/tv/Product.java
  2. 4
      app/src/main/java/com/fongmi/android/tv/api/WallConfig.java
  3. 31
      app/src/main/java/com/fongmi/android/tv/utils/ImgUtil.java
  4. 26
      app/src/mobile/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();
}
}

@ -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;
}

@ -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<Bitmap> getListener(ImageView view) {
return getListener(view, ImageView.ScaleType.CENTER);
}

@ -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);
}
}
}

Loading…
Cancel
Save