Resize avatars to 1024x1024.

This commit is contained in:
Greyson Parrelli 2020-03-26 10:26:16 -04:00
parent e6f9cb9929
commit f875623cd0
4 changed files with 25 additions and 14 deletions

View file

@ -549,9 +549,17 @@ public final class EditorModel implements Parcelable, RendererContext.Ready {
*/ */
@WorkerThread @WorkerThread
public @NonNull Bitmap render(@NonNull Context context) { public @NonNull Bitmap render(@NonNull Context context) {
return render(context, null);
}
/**
* Blocking render of the model.
*/
@WorkerThread
public @NonNull Bitmap render(@NonNull Context context, @Nullable Point size) {
EditorElement image = editorElementHierarchy.getFlipRotate(); EditorElement image = editorElementHierarchy.getFlipRotate();
RectF cropRect = editorElementHierarchy.getCropRect(); RectF cropRect = editorElementHierarchy.getCropRect();
Point outputSize = getOutputSize(); Point outputSize = size != null ? size : getOutputSize();
Bitmap bitmap = Bitmap.createBitmap(outputSize.x, outputSize.y, Bitmap.Config.ARGB_8888); Bitmap bitmap = Bitmap.createBitmap(outputSize.x, outputSize.y, Bitmap.Config.ARGB_8888);
try { try {

View file

@ -2,6 +2,7 @@ package org.thoughtcrime.securesms.mediasend;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.graphics.Point;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.widget.Toast; import android.widget.Toast;
@ -26,6 +27,8 @@ import java.util.Collections;
public class AvatarSelectionActivity extends AppCompatActivity implements CameraFragment.Controller, ImageEditorFragment.Controller, MediaPickerFolderFragment.Controller, MediaPickerItemFragment.Controller { public class AvatarSelectionActivity extends AppCompatActivity implements CameraFragment.Controller, ImageEditorFragment.Controller, MediaPickerFolderFragment.Controller, MediaPickerItemFragment.Controller {
private static final Point AVATAR_DIMENSIONS = new Point(1024, 1024);
private static final String IMAGE_CAPTURE = "IMAGE_CAPTURE"; private static final String IMAGE_CAPTURE = "IMAGE_CAPTURE";
private static final String IMAGE_EDITOR = "IMAGE_EDITOR"; private static final String IMAGE_EDITOR = "IMAGE_EDITOR";
private static final String ARG_GALLERY = "ARG_GALLERY"; private static final String ARG_GALLERY = "ARG_GALLERY";
@ -199,9 +202,6 @@ public class AvatarSelectionActivity extends AppCompatActivity implements Camera
} }
ImageEditorFragment.Data data = (ImageEditorFragment.Data) fragment.saveState(); ImageEditorFragment.Data data = (ImageEditorFragment.Data) fragment.saveState();
if (data == null) {
throw new AssertionError();
}
EditorModel model = data.readModel(); EditorModel model = data.readModel();
if (model == null) { if (model == null) {
@ -210,7 +210,7 @@ public class AvatarSelectionActivity extends AppCompatActivity implements Camera
MediaRepository.transformMedia(this, MediaRepository.transformMedia(this,
Collections.singletonList(currentMedia), Collections.singletonList(currentMedia),
Collections.singletonMap(currentMedia, new ImageEditorModelRenderMediaTransform(model)), Collections.singletonMap(currentMedia, new ImageEditorModelRenderMediaTransform(model, AVATAR_DIMENSIONS)),
output -> { output -> {
Media transformed = output.get(currentMedia); Media transformed = output.get(currentMedia);

View file

@ -2,15 +2,18 @@ package org.thoughtcrime.securesms.mediasend;
import android.content.Context; import android.content.Context;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.Point;
import android.net.Uri; import android.net.Uri;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.WorkerThread; import androidx.annotation.WorkerThread;
import org.thoughtcrime.securesms.imageeditor.model.EditorModel; import org.thoughtcrime.securesms.imageeditor.model.EditorModel;
import org.thoughtcrime.securesms.logging.Log; import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.providers.BlobProvider; import org.thoughtcrime.securesms.providers.BlobProvider;
import org.thoughtcrime.securesms.util.MediaUtil; import org.thoughtcrime.securesms.util.MediaUtil;
import org.thoughtcrime.securesms.util.Util;
import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.libsignal.util.guava.Optional;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
@ -20,10 +23,16 @@ public final class ImageEditorModelRenderMediaTransform implements MediaTransfor
private static final String TAG = Log.tag(ImageEditorModelRenderMediaTransform.class); private static final String TAG = Log.tag(ImageEditorModelRenderMediaTransform.class);
private final EditorModel modelToRender; @NonNull private final EditorModel modelToRender;
@Nullable private final Point size;
ImageEditorModelRenderMediaTransform(@NonNull EditorModel modelToRender) { ImageEditorModelRenderMediaTransform(@NonNull EditorModel modelToRender) {
this(modelToRender, null);
}
ImageEditorModelRenderMediaTransform(@NonNull EditorModel modelToRender, @Nullable Point size) {
this.modelToRender = modelToRender; this.modelToRender = modelToRender;
this.size = size;
} }
@WorkerThread @WorkerThread
@ -31,7 +40,7 @@ public final class ImageEditorModelRenderMediaTransform implements MediaTransfor
public @NonNull Media transform(@NonNull Context context, @NonNull Media media) { public @NonNull Media transform(@NonNull Context context, @NonNull Media media) {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
Bitmap bitmap = modelToRender.render(context); Bitmap bitmap = modelToRender.render(context, size);
try { try {
bitmap.compress(Bitmap.CompressFormat.JPEG, 80, outputStream); bitmap.compress(Bitmap.CompressFormat.JPEG, 80, outputStream);
@ -46,11 +55,7 @@ public final class ImageEditorModelRenderMediaTransform implements MediaTransfor
return media; return media;
} finally { } finally {
bitmap.recycle(); bitmap.recycle();
try { Util.close(outputStream);
outputStream.close();
} catch (IOException e) {
Log.w(TAG, e);
}
} }
} }
} }

View file

@ -125,8 +125,6 @@ public final class ImageEditorFragment extends Fragment implements ImageEditorHu
imageMaxWidth = mediaConstraints.getImageMaxWidth(requireContext()); imageMaxWidth = mediaConstraints.getImageMaxWidth(requireContext());
imageMaxHeight = mediaConstraints.getImageMaxHeight(requireContext()); imageMaxHeight = mediaConstraints.getImageMaxHeight(requireContext());
StickerSearchRepository repository = new StickerSearchRepository(requireContext());
} }
@Nullable @Nullable