* Fix improper attachments in replies * Fix import data path * Improve errors * Fix importing attachments directly from zip file * Add some test cases to cover error paths
78 строки
1.9 KiB
Go
78 строки
1.9 KiB
Go
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
// See LICENSE.txt for license information.
|
|
|
|
package imaging
|
|
|
|
import (
|
|
"fmt"
|
|
"image"
|
|
"io"
|
|
|
|
"github.com/disintegration/imaging"
|
|
"github.com/rwcarlsen/goexif/exif"
|
|
)
|
|
|
|
const (
|
|
/*
|
|
EXIF Image Orientations
|
|
1 2 3 4 5 6 7 8
|
|
|
|
888888 888888 88 88 8888888888 88 88 8888888888
|
|
88 88 88 88 88 88 88 88 88 88 88 88
|
|
8888 8888 8888 8888 88 8888888888 8888888888 88
|
|
88 88 88 88
|
|
88 88 888888 888888
|
|
*/
|
|
Upright = iota + 1
|
|
UprightMirrored
|
|
UpsideDown
|
|
UpsideDownMirrored
|
|
RotatedCWMirrored
|
|
RotatedCCW
|
|
RotatedCCWMirrored
|
|
RotatedCW
|
|
)
|
|
|
|
// MakeImageUpright changes the orientation of the given image.
|
|
func MakeImageUpright(img image.Image, orientation int) image.Image {
|
|
switch orientation {
|
|
case UprightMirrored:
|
|
return imaging.FlipH(img)
|
|
case UpsideDown:
|
|
return imaging.Rotate180(img)
|
|
case UpsideDownMirrored:
|
|
return imaging.FlipV(img)
|
|
case RotatedCWMirrored:
|
|
return imaging.Transpose(img)
|
|
case RotatedCCW:
|
|
return imaging.Rotate270(img)
|
|
case RotatedCCWMirrored:
|
|
return imaging.Transverse(img)
|
|
case RotatedCW:
|
|
return imaging.Rotate90(img)
|
|
default:
|
|
return img
|
|
}
|
|
}
|
|
|
|
// GetImageOrientation reads the input data and returns the EXIF encoded
|
|
// image orientation.
|
|
func GetImageOrientation(input io.Reader) (int, error) {
|
|
exifData, err := exif.Decode(input)
|
|
if err != nil {
|
|
return Upright, fmt.Errorf("failed to decode exif data: %w", err)
|
|
}
|
|
|
|
tag, err := exifData.Get("Orientation")
|
|
if err != nil {
|
|
return Upright, fmt.Errorf("failed to get orientation field from exif data: %w", err)
|
|
}
|
|
|
|
orientation, err := tag.Int(0)
|
|
if err != nil {
|
|
return Upright, fmt.Errorf("failed to get value from exif tag: %w", err)
|
|
}
|
|
|
|
return orientation, nil
|
|
}
|