diff --git a/app/emoji.go b/app/emoji.go index 48e7773b5a..9982428711 100644 --- a/app/emoji.go +++ b/app/emoji.go @@ -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 diff --git a/app/imaging/encode.go b/app/imaging/encode.go index 1afb3159d9..d10f73c91a 100644 --- a/app/imaging/encode.go +++ b/app/imaging/encode.go @@ -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 } diff --git a/app/user_test.go b/app/user_test.go index 086e71e25f..b4a57dd32a 100644 --- a/app/user_test.go +++ b/app/user_test.go @@ -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) diff --git a/app/users/profile_picture.go b/app/users/profile_picture.go index 1858140e52..4a9c73f36f 100644 --- a/app/users/profile_picture.go +++ b/app/users/profile_picture.go @@ -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 } diff --git a/i18n/en.json b/i18n/en.json index 0fac9e2df3..c9d23f4a46 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -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", diff --git a/tests/10000x1_expected_preview.png b/tests/10000x1_expected_preview.png index bf2ca9cc21..6c48a52421 100644 Binary files a/tests/10000x1_expected_preview.png and b/tests/10000x1_expected_preview.png differ diff --git a/tests/10000x1_expected_thumb.png b/tests/10000x1_expected_thumb.png index a354c41047..93a8cb3667 100644 Binary files a/tests/10000x1_expected_thumb.png and b/tests/10000x1_expected_thumb.png differ diff --git a/tests/1x10000_expected_preview.png b/tests/1x10000_expected_preview.png index b4317244e9..ba938e6aef 100644 Binary files a/tests/1x10000_expected_preview.png and b/tests/1x10000_expected_preview.png differ diff --git a/tests/1x10000_expected_thumb.png b/tests/1x10000_expected_thumb.png index 71dd5eba8f..4078828348 100644 Binary files a/tests/1x10000_expected_thumb.png and b/tests/1x10000_expected_thumb.png differ diff --git a/tests/fill_test_16bit_rgb_out.png b/tests/fill_test_16bit_rgb_out.png index bb9741d53f..72f7b9ca99 100644 Binary files a/tests/fill_test_16bit_rgb_out.png and b/tests/fill_test_16bit_rgb_out.png differ diff --git a/tests/fill_test_16bit_rgba_out.png b/tests/fill_test_16bit_rgba_out.png index 491bee1ce5..7e521ccbe6 100644 Binary files a/tests/fill_test_16bit_rgba_out.png and b/tests/fill_test_16bit_rgba_out.png differ diff --git a/tests/fill_test_8bit_palette_out.png b/tests/fill_test_8bit_palette_out.png index d865b78def..5feebf44cd 100644 Binary files a/tests/fill_test_8bit_palette_out.png and b/tests/fill_test_8bit_palette_out.png differ diff --git a/tests/fill_test_8bit_rgb_out.png b/tests/fill_test_8bit_rgb_out.png index 499026d665..3214f84c0f 100644 Binary files a/tests/fill_test_8bit_rgb_out.png and b/tests/fill_test_8bit_rgb_out.png differ diff --git a/tests/fill_test_8bit_rgba_out.png b/tests/fill_test_8bit_rgba_out.png index bd5c157f2a..3167887d9d 100644 Binary files a/tests/fill_test_8bit_rgba_out.png and b/tests/fill_test_8bit_rgba_out.png differ