Signal-Android/app/src/main/java/org/thoughtcrime/securesms/mediasend/ImageEditorModelRenderMedia...

62 lines
2.1 KiB
Java
Raw Normal View History

2020-02-13 19:22:21 +01:00
package org.thoughtcrime.securesms.mediasend;
import android.content.Context;
import android.graphics.Bitmap;
2020-03-26 15:26:16 +01:00
import android.graphics.Point;
2020-02-13 19:22:21 +01:00
import android.net.Uri;
import androidx.annotation.NonNull;
2020-03-26 15:26:16 +01:00
import androidx.annotation.Nullable;
2020-02-13 19:22:21 +01:00
import androidx.annotation.WorkerThread;
import org.thoughtcrime.securesms.imageeditor.model.EditorModel;
import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.providers.BlobProvider;
import org.thoughtcrime.securesms.util.MediaUtil;
2020-03-26 15:26:16 +01:00
import org.thoughtcrime.securesms.util.Util;
2020-02-13 19:22:21 +01:00
import org.whispersystems.libsignal.util.guava.Optional;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
public final class ImageEditorModelRenderMediaTransform implements MediaTransform {
private static final String TAG = Log.tag(ImageEditorModelRenderMediaTransform.class);
2020-03-26 15:26:16 +01:00
@NonNull private final EditorModel modelToRender;
@Nullable private final Point size;
2020-02-13 19:22:21 +01:00
ImageEditorModelRenderMediaTransform(@NonNull EditorModel modelToRender) {
2020-03-26 15:26:16 +01:00
this(modelToRender, null);
}
ImageEditorModelRenderMediaTransform(@NonNull EditorModel modelToRender, @Nullable Point size) {
2020-02-13 19:22:21 +01:00
this.modelToRender = modelToRender;
2020-03-26 15:26:16 +01:00
this.size = size;
2020-02-13 19:22:21 +01:00
}
@WorkerThread
@Override
public @NonNull Media transform(@NonNull Context context, @NonNull Media media) {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
2020-03-26 15:26:16 +01:00
Bitmap bitmap = modelToRender.render(context, size);
2020-02-13 19:22:21 +01:00
try {
bitmap.compress(Bitmap.CompressFormat.JPEG, 80, outputStream);
Uri uri = BlobProvider.getInstance()
.forData(outputStream.toByteArray())
.withMimeType(MediaUtil.IMAGE_JPEG)
.createForSingleSessionOnDisk(context);
return new Media(uri, MediaUtil.IMAGE_JPEG, media.getDate(), bitmap.getWidth(), bitmap.getHeight(), outputStream.size(), 0, media.getBucketId(), media.getCaption(), Optional.absent());
} catch (IOException e) {
Log.w(TAG, "Failed to render image. Using base image.");
return media;
} finally {
bitmap.recycle();
2020-03-26 15:26:16 +01:00
Util.close(outputStream);
2020-02-13 19:22:21 +01:00
}
}
}