golang根据exif信息旋转图片正确方向

[复制链接]
查看: 2396   回复: 9
发表于 2024-6-13 01:25:29 | 显示全部楼层 |阅读模式
测试图片https://dmj1.lanzoub.com/i8NY002pyfzc

golang怎么根据exif信息旋转图片正确方向呢?
真的好难搞

err = jpeg.Encode(file, dst, &jpeg.Options{80})

  1. func RotateImage(src []byte, angle int) ([]byte, error) {        var img, _, err = image.Decode(bytes.NewReader(src))        //var img, err = GetImage(src)        if err != nil {                return src, err        }        angle = angle % 360        //弧度转换        radian := float64(angle) * math.Pi / 180.0        cos := math.Cos(float64(radian))        sin := math.Sin(radian)        //原图的宽高        w := float64(img.Bounds().Dx())        h := float64(img.Bounds().Dy())         //新图高宽        W := int((math.Max(math.Abs(float64(w*cos-h*sin)), math.Abs(w*cos+h*sin))))        H := int((math.Max(math.Abs(w*sin-h*cos), math.Abs(w*sin+h*cos))))         dst := image.NewNRGBA(image.Rect(0, 0, W, H))        err = graphics.Rotate(dst, img, &graphics.RotateOptions{radian})        if err != nil {                return src, err        }         file, err := os.Create("newImage.jpg")        if err != nil {                return src, err        }        defer file.Close()        err = jpeg.Encode(file, dst, &jpeg.Options{50})        if err != nil {                return src, err        }         return nil, nil}func main() {        ori := ReadOrientation("bebRotated.jpg")//先读取该图片的原始方向,方向值参考上图,        data, err := ioutil.ReadFile("bebRotated.jpg")根据方向值,旋转图片        if err != nil {                fmt.Println(err)                return        }        fmt.Println(ori)        //根据图片原始信息的Orientation判断需要转多少度        if ori == 6 {                RotateImage(data, 90)        }        if ori == 3 {                RotateImage(data, 180)        }        if ori == 8 {                RotateImage(data, 270)        } }
复制代码
回复

使用道具 举报

 楼主| 发表于 2024-6-13 01:26:07 | 显示全部楼层
EXIF 有2个决定方向,一个是原始方向,也就是分辨率,5472*3648,还有一个是方向字段。你这图EXIF里分辨率是横的,要自己读EXIF旋转才行。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-6-13 01:26:53 | 显示全部楼层
没学过Golang,下一位!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-6-13 01:27:06 | 显示全部楼层
好的老哥
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-6-13 01:27:24 | 显示全部楼层
我也没学过Golang,下一位!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-6-13 01:28:04 | 显示全部楼层
哈哈好的老哥:victory:
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-6-13 01:28:10 | 显示全部楼层
你那图片EXIF里就是横的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-6-13 01:28:50 | 显示全部楼层
没学过Golang,但看你的代码也没有处理旋转代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-6-13 01:29:28 | 显示全部楼层
啊,拍下来是竖版的,导入电脑看也是竖版的
回复 支持 反对

使用道具 举报

发表于 2024-6-13 01:30:05 | 显示全部楼层
谢谢老哥 提醒 我再继续搜搜相关知识
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则