diff options
Diffstat (limited to 'api')
-rw-r--r-- | api/file.go | 85 | ||||
-rw-r--r-- | api/import.go | 14 |
2 files changed, 50 insertions, 49 deletions
diff --git a/api/file.go b/api/file.go index dd075d3e0..8de69937a 100644 --- a/api/file.go +++ b/api/file.go @@ -195,50 +195,57 @@ func doUploadFile(teamId string, channelId string, userId string, rawFilename st func handleImages(previewPathList []string, thumbnailPathList []string, fileData [][]byte) { for i, data := range fileData { go func(i int, data []byte) { - // Decode image bytes into Image object - img, imgType, err := image.Decode(bytes.NewReader(fileData[i])) - if err != nil { - l4g.Error(utils.T("api.file.handle_images_forget.decode.error"), err) - return - } - - width := img.Bounds().Dx() - height := img.Bounds().Dy() - - // Fill in the background of a potentially-transparent png file as white - if imgType == "png" { - dst := image.NewRGBA(img.Bounds()) - draw.Draw(dst, dst.Bounds(), image.NewUniform(color.White), image.Point{}, draw.Src) - draw.Draw(dst, dst.Bounds(), img, img.Bounds().Min, draw.Over) - img = dst - } - - // Flip the image to be upright - orientation, _ := getImageOrientation(fileData[i]) - - switch orientation { - case UprightMirrored: - img = imaging.FlipH(img) - case UpsideDown: - img = imaging.Rotate180(img) - case UpsideDownMirrored: - img = imaging.FlipV(img) - case RotatedCWMirrored: - img = imaging.Transpose(img) - case RotatedCCW: - img = imaging.Rotate270(img) - case RotatedCCWMirrored: - img = imaging.Transverse(img) - case RotatedCW: - img = imaging.Rotate90(img) + img, width, height := prepareImage(fileData[i]) + if img != nil { + go generateThumbnailImage(*img, thumbnailPathList[i], width, height) + go generatePreviewImage(*img, previewPathList[i], width) } - - go generateThumbnailImage(img, thumbnailPathList[i], width, height) - go generatePreviewImage(img, previewPathList[i], width) }(i, data) } } +func prepareImage(fileData []byte) (*image.Image, int, int) { + // Decode image bytes into Image object + img, imgType, err := image.Decode(bytes.NewReader(fileData)) + if err != nil { + l4g.Error(utils.T("api.file.handle_images_forget.decode.error"), err) + return nil, 0, 0 + } + + width := img.Bounds().Dx() + height := img.Bounds().Dy() + + // Fill in the background of a potentially-transparent png file as white + if imgType == "png" { + dst := image.NewRGBA(img.Bounds()) + draw.Draw(dst, dst.Bounds(), image.NewUniform(color.White), image.Point{}, draw.Src) + draw.Draw(dst, dst.Bounds(), img, img.Bounds().Min, draw.Over) + img = dst + } + + // Flip the image to be upright + orientation, _ := getImageOrientation(fileData) + + switch orientation { + case UprightMirrored: + img = imaging.FlipH(img) + case UpsideDown: + img = imaging.Rotate180(img) + case UpsideDownMirrored: + img = imaging.FlipV(img) + case RotatedCWMirrored: + img = imaging.Transpose(img) + case RotatedCCW: + img = imaging.Rotate270(img) + case RotatedCCWMirrored: + img = imaging.Transverse(img) + case RotatedCW: + img = imaging.Rotate90(img) + } + + return &img, width, height +} + func getImageOrientation(imageData []byte) (int, error) { if exifData, err := exif.Decode(bytes.NewReader(imageData)); err != nil { return Upright, err diff --git a/api/import.go b/api/import.go index 3ac6a9ce9..570444464 100644 --- a/api/import.go +++ b/api/import.go @@ -62,23 +62,17 @@ func ImportFile(file io.Reader, teamId string, channelId string, userId string, io.Copy(buf, file) data := buf.Bytes() - previewPathList := []string{} - thumbnailPathList := []string{} - imageDataList := [][]byte{} - fileInfo, err := doUploadFile(teamId, channelId, userId, fileName, data) if err != nil { return nil, err } - if fileInfo.PreviewPath != "" || fileInfo.ThumbnailPath != "" { - previewPathList = append(previewPathList, fileInfo.PreviewPath) - thumbnailPathList = append(thumbnailPathList, fileInfo.ThumbnailPath) - imageDataList = append(imageDataList, data) + img, width, height := prepareImage(data) + if img != nil { + generateThumbnailImage(*img, fileInfo.ThumbnailPath, width, height) + generatePreviewImage(*img, fileInfo.PreviewPath, width) } - go handleImages(previewPathList, thumbnailPathList, imageDataList) - return fileInfo, nil } |