Fix blurry thumbnails

This commit is contained in:
Christian Pauly 2020-05-04 14:03:07 +00:00
parent 8433527ea6
commit c22090a68d
3 changed files with 4 additions and 47 deletions

View File

@ -489,7 +489,6 @@ class Client {
/// Uploads a new user avatar for this user.
Future<void> setAvatar(MatrixFile file) async {
await file.resize(width: Client.defaultThumbnailSize);
final uploadResp = await upload(file);
await jsonRequest(
type: HTTPType.PUT,

View File

@ -478,13 +478,10 @@ class Room {
Event inReplyTo,
Map<String, dynamic> info,
bool waitUntilSent = false,
int thumbnailMaxWidth = 800,
int thumbnailMaxHeight = 600,
int thumbnailQuality = 50,
MatrixFile thumbnail,
}) async {
Image fileImage;
Image thumbnailImage;
MatrixFile thumbnail;
EncryptedFile encryptedThumbnail;
String thumbnailUploadResp;
@ -505,17 +502,10 @@ class Room {
}
if (msgType == 'm.image') {
var thumbnailPathParts = file.path.split('/');
thumbnailPathParts.last = 'thumbnail_' + thumbnailPathParts.last + '.jpg';
final thumbnailPath = thumbnailPathParts.join('/');
thumbnail = MatrixFile(bytes: file.bytes, path: thumbnailPath);
await thumbnail.resize(
width: thumbnailMaxWidth,
height: thumbnailMaxHeight,
quality: thumbnailQuality,
);
fileImage = decodeImage(file.bytes.toList());
thumbnailImage = decodeImage(thumbnail.bytes.toList());
if (thumbnail != null) {
thumbnailImage = decodeImage(thumbnail.bytes.toList());
}
}
final sendEncrypted = encrypted && client.fileEncryptionEnabled;
@ -1257,7 +1247,6 @@ class Room {
/// Uploads a new user avatar for this room. Returns the event ID of the new
/// m.room.avatar event.
Future<String> setAvatar(MatrixFile file) async {
await file.resize(width: Client.defaultThumbnailSize);
final uploadResp = await client.upload(file);
final setAvatarResp = await client.jsonRequest(
type: HTTPType.PUT,

View File

@ -1,43 +1,12 @@
/// Workaround until [File] in dart:io and dart:html is unified
import 'dart:typed_data';
import 'package:image/image.dart';
import 'package:matrix_file_e2ee/matrix_file_e2ee.dart';
class MatrixFile {
Uint8List bytes;
String path;
/// If this file is an Image, this will resize it to the
/// given width and height. Otherwise returns false.
/// At least width or height must be set!
/// The bytes will be encoded as jpg.
Future<bool> resize({
int width,
int height,
int quality = 50,
}) async {
if (width == null && height == null) {
throw ('At least width or height must be set!');
}
Image image;
try {
image = decodeImage(bytes);
} catch (_) {
return false;
}
var resizedImage = image;
if (image.width > width) {
resizedImage = copyResize(image, width: width);
}
if (image.height > height) {
resizedImage = copyResize(image, height: height);
}
bytes = encodeJpg(resizedImage, quality: quality);
return true;
}
/// Encrypts this file, changes the [bytes] and returns the
/// encryption information as an [EncryptedFile].
Future<EncryptedFile> encrypt() async {