From 7ac8eaba925cb9f3d02bc93717cb3c573fd26ec2 Mon Sep 17 00:00:00 2001 From: Harrison Healey Date: Wed, 24 May 2017 10:52:05 -0400 Subject: PLT-6534 Rotated uploaded profile pictures to be upright (#6482) --- app/file.go | 29 +++++++++++++++++------------ app/user.go | 5 +++++ 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/app/file.go b/app/file.go index ad58de623..3b7a6860c 100644 --- a/app/file.go +++ b/app/file.go @@ -495,30 +495,35 @@ func prepareImage(fileData []byte) (*image.Image, int, int) { } // Flip the image to be upright - orientation, _ := getImageOrientation(fileData) + orientation, _ := getImageOrientation(bytes.NewReader(fileData)) + img = makeImageUpright(img, orientation) + return &img, width, height +} + +func makeImageUpright(img image.Image, orientation int) image.Image { switch orientation { case UprightMirrored: - img = imaging.FlipH(img) + return imaging.FlipH(img) case UpsideDown: - img = imaging.Rotate180(img) + return imaging.Rotate180(img) case UpsideDownMirrored: - img = imaging.FlipV(img) + return imaging.FlipV(img) case RotatedCWMirrored: - img = imaging.Transpose(img) + return imaging.Transpose(img) case RotatedCCW: - img = imaging.Rotate270(img) + return imaging.Rotate270(img) case RotatedCCWMirrored: - img = imaging.Transverse(img) + return imaging.Transverse(img) case RotatedCW: - img = imaging.Rotate90(img) + return imaging.Rotate90(img) + default: + return img } - - return &img, width, height } -func getImageOrientation(imageData []byte) (int, error) { - if exifData, err := exif.Decode(bytes.NewReader(imageData)); err != nil { +func getImageOrientation(input io.Reader) (int, error) { + if exifData, err := exif.Decode(input); err != nil { return Upright, err } else { if tag, err := exifData.Get("Orientation"); err != nil { diff --git a/app/user.go b/app/user.go index 2a570c7ac..e5cc20568 100644 --- a/app/user.go +++ b/app/user.go @@ -805,6 +805,11 @@ func SetProfileImage(userId string, imageData *multipart.FileHeader) *model.AppE return model.NewLocAppError("SetProfileImage", "api.user.upload_profile_user.decode.app_error", nil, err.Error()) } + file.Seek(0, 0) + + orientation, _ := getImageOrientation(file) + img = makeImageUpright(img, orientation) + // Scale profile image img = imaging.Fill(img, utils.Cfg.FileSettings.ProfileWidth, utils.Cfg.FileSettings.ProfileHeight, imaging.Center, imaging.Lanczos) -- cgit v1.2.3-1-g7c22