.heic 格式的图像方向已重置

问题描述 投票:0回答:1

我必须通过表单数据http请求接收图像并将其发送到文件存储。

但是,这个过程中出现了一个问题——如果图像是.heic格式(比如iPhone就是用这种格式拍摄的)并且是垂直的(高度>宽度),那么图像会转为水平的,即它只是侧躺着。我在其他格式上没有注意到这个问题。

我读到了 lib

github.com/rwcarlsen/goexif/exif
,它允许您获取 exif 数据,它还存储图像的方向。 这是从 Fiber 框架的 form-data 获取文件的函数:

func ParseFileToBytes(c *fiber.Ctx, fileName string) ([]byte, error) {
    if c.Method() != fiber.MethodPatch {
        return nil, errlst.HttpErrInvalidRequest
    }

    formFile, err := c.FormFile(fileName)
    if err != nil { ... }

    file, err := formFile.Open()
    if err != nil { ... }
    defer file.Close()

    fileData, err := io.ReadAll(file)
    if err != nil { ... }

    exifData, err := exif.Decode(bytes.NewReader(fileData))
    if exifData == nil {
        logger.Log.Info("exifData is nil")
    } else {
        logger.Log.Info("exifData is not nil")
    }

    return fileData, nil
}

但是

“exifData is nil”
一直显示,所以我无法以任何方式确定文件最初的方向,以便调整其进一步的存储。

我将很高兴获得任何帮助!

image go http form-data heic
1个回答
0
投票

这个库帮助了我:

https://github.com/evanoberholster/imagemeta

func rotateImage(imageData []byte, img image.Image) image.Image {
    exifData, err := imagemeta.Decode(bytes.NewReader(imageData))
    if err != nil {
        logger.Log.Error("EXIF data is not available for this image", zap.Error(err))
    } else {
        orientation := exifData.Orientation.String()
        logger.Log.Info("Image orientation is " + orientation)

        if orientation == "Rotate 90 CW" {
            img = imaging.Rotate270(img)
        }
    }
    return img
}
© www.soinside.com 2019 - 2024. All rights reserved.