golang根据exif信息旋转图片正确方向
测试图片https://dmj1.lanzoub.com/i8NY002pyfzcgolang怎么根据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) } } EXIF 有2个决定方向,一个是原始方向,也就是分辨率,5472*3648,还有一个是方向字段。你这图EXIF里分辨率是横的,要自己读EXIF旋转才行。 没学过Golang,下一位! 好的老哥 我也没学过Golang,下一位! 哈哈好的老哥:victory: 你那图片EXIF里就是横的 没学过Golang,但看你的代码也没有处理旋转代码 啊,拍下来是竖版的,导入电脑看也是竖版的 谢谢老哥 提醒 我再继续搜搜相关知识
页:
[1]