github.com/masterhung0112/hk_server/v5@v5.0.0-20220302090640-ec71aef15e1c/app/imaging/orientation.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package imaging 5 6 import ( 7 "image" 8 "io" 9 10 "github.com/disintegration/imaging" 11 "github.com/rwcarlsen/goexif/exif" 12 ) 13 14 const ( 15 /* 16 EXIF Image Orientations 17 1 2 3 4 5 6 7 8 18 19 888888 888888 88 88 8888888888 88 88 8888888888 20 88 88 88 88 88 88 88 88 88 88 88 88 21 8888 8888 8888 8888 88 8888888888 8888888888 88 22 88 88 88 88 23 88 88 888888 888888 24 */ 25 Upright = iota + 1 26 UprightMirrored 27 UpsideDown 28 UpsideDownMirrored 29 RotatedCWMirrored 30 RotatedCCW 31 RotatedCCWMirrored 32 RotatedCW 33 ) 34 35 // MakeImageUpright changes the orientation of the given image. 36 func MakeImageUpright(img image.Image, orientation int) image.Image { 37 switch orientation { 38 case UprightMirrored: 39 return imaging.FlipH(img) 40 case UpsideDown: 41 return imaging.Rotate180(img) 42 case UpsideDownMirrored: 43 return imaging.FlipV(img) 44 case RotatedCWMirrored: 45 return imaging.Transpose(img) 46 case RotatedCCW: 47 return imaging.Rotate270(img) 48 case RotatedCCWMirrored: 49 return imaging.Transverse(img) 50 case RotatedCW: 51 return imaging.Rotate90(img) 52 default: 53 return img 54 } 55 } 56 57 // GetImageOrientation reads the input data and returns the EXIF encoded 58 // image orientation. 59 func GetImageOrientation(input io.Reader) (int, error) { 60 exifData, err := exif.Decode(input) 61 if err != nil { 62 return Upright, err 63 } 64 65 tag, err := exifData.Get("Orientation") 66 if err != nil { 67 return Upright, err 68 } 69 70 orientation, err := tag.Int(0) 71 if err != nil { 72 return Upright, err 73 } 74 75 return orientation, nil 76 }