MM-49395: Increase compression for previews and emojis (#21985)

We also reduce the max size of uploaded emojis to 512KiB.

https://mattermost.atlassian.net/browse/MM-49395

```release-note
Max size of uploaded emojis is now reduced to 512KiB
to reduce image download bandwidth.
```
Этот коммит содержится в:
Agniva De Sarker
2023-01-05 19:34:22 +05:30
коммит произвёл GitHub
родитель 1078292ac6
Коммит a83170e753
14 изменённых файлов: 12 добавлений и 8 удалений

Просмотреть файл

@@ -14,7 +14,6 @@ import (
"image/draw"
"image/gif"
_ "image/jpeg"
"image/png"
"io"
"mime/multipart"
"net/http"
@@ -31,7 +30,7 @@ import (
)
const (
MaxEmojiFileSize = 1 << 20 // 1 MB
MaxEmojiFileSize = 1 << 19 // 512 KiB
MaxEmojiWidth = 128
MaxEmojiHeight = 128
MaxEmojiOriginalWidth = 1028
@@ -155,8 +154,8 @@ func (a *App) UploadEmojiImage(c request.CTX, id string, imageData *multipart.Fi
return model.NewAppError("uploadEmojiImage", "api.emoji.upload.large_image.decode_error", nil, "", http.StatusBadRequest).Wrap(err)
}
resized_image := resizeEmoji(img, config.Width, config.Height)
if err := png.Encode(newbuf, resized_image); err != nil {
resizedImg := resizeEmoji(img, config.Width, config.Height)
if err := a.ch.imgEncoder.EncodePNG(newbuf, resizedImg); err != nil {
return model.NewAppError("uploadEmojiImage", "api.emoji.upload.large_image.encode_error", nil, "", http.StatusBadRequest).Wrap(err)
}
buf = newbuf

Просмотреть файл

@@ -45,7 +45,9 @@ func NewEncoder(opts EncoderOptions) (*Encoder, error) {
e.sem = make(chan struct{}, opts.ConcurrencyLevel)
}
e.opts = opts
e.pngEncoder = &png.Encoder{}
e.pngEncoder = &png.Encoder{
CompressionLevel: png.BestCompression,
}
return &e, nil
}

Просмотреть файл

@@ -121,7 +121,7 @@ func TestAdjustProfileImage(t *testing.T) {
assert.True(t, adjusted.Len() > 0)
assert.NotEqual(t, testjpg, adjusted)
// default image should require adjustment
// default image should not require adjustment
user := th.BasicUser
image, err := th.App.GetDefaultProfileImage(user)
require.Nil(t, err)

Просмотреть файл

@@ -160,7 +160,10 @@ func createProfileImage(username string, userID string, initialFont string) ([]b
buf := new(bytes.Buffer)
if imgErr := png.Encode(buf, dstImg); imgErr != nil {
enc := png.Encoder{
CompressionLevel: png.BestCompression,
}
if imgErr := enc.Encode(buf, dstImg); imgErr != nil {
return nil, ImageEncodingError
}

Просмотреть файл

@@ -1719,7 +1719,7 @@
},
{
"id": "api.emoji.create.too_large.app_error",
"translation": "Unable to create emoji. Image must be less than 1 MB in size."
"translation": "Unable to create emoji. Image must be less than 512 KiB in size."
},
{
"id": "api.emoji.disabled.app_error",

Двоичные данные
tests/10000x1_expected_preview.png

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 92 B

После

Ширина:  |  Высота:  |  Размер: 92 B

Двоичные данные
tests/10000x1_expected_thumb.png

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 76 B

После

Ширина:  |  Высота:  |  Размер: 76 B

Двоичные данные
tests/1x10000_expected_preview.png

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 121 B

После

Ширина:  |  Высота:  |  Размер: 121 B

Двоичные данные
tests/1x10000_expected_thumb.png

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 79 B

После

Ширина:  |  Высота:  |  Размер: 79 B

Двоичные данные
tests/fill_test_16bit_rgb_out.png

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 1.2 KiB

После

Ширина:  |  Высота:  |  Размер: 1011 B

Двоичные данные
tests/fill_test_16bit_rgba_out.png

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 1.5 KiB

После

Ширина:  |  Высота:  |  Размер: 1.3 KiB

Двоичные данные
tests/fill_test_8bit_palette_out.png

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 140 B

После

Ширина:  |  Высота:  |  Размер: 140 B

Двоичные данные
tests/fill_test_8bit_rgb_out.png

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 896 B

После

Ширина:  |  Высота:  |  Размер: 700 B

Двоичные данные
tests/fill_test_8bit_rgba_out.png

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 1.1 KiB

После

Ширина:  |  Высота:  |  Размер: 897 B