灌水王 发表于 2024-6-13 01:25:29

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

测试图片https://dmj1.lanzoub.com/i8NY002pyfzc

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

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


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

啊,拍下来是竖版的,导入电脑看也是竖版的

adventurer 发表于 2024-6-13 01:30:05

谢谢老哥 提醒 我再继续搜搜相关知识
页: [1]
查看完整版本: golang根据exif信息旋转图片正确方向