最近在使用百度图片翻译时遇到一个问题,就是图片会翻转90,经与百度沟通,发现是原始图片中有个旋转参数引起的。
于是写个demo验证一下。
// 获取元数据中的旋转方向
func getOrientation() int {//打开图像文件f, err := os.Open("image.jpg")if err != nil {log.Fatal(err)}defer f.Close()// 解码 EXIF 元数据x, err := exif.Decode(f)if err != nil {if err.Error() == "EOF" {return 0}log.Fatal(err)}// 获取图片方向orientation, err := x.Get(exif.Orientation)if err != nil {log.Fatalf("failed to get orientation: %v", err)}// 打印方向信息fmt.Println("Orientation:", orientation)// 根据 EXIF 方向信息获取旋转角度// 1: 正常(0°)// 3: 180°// 6: 90° 顺时针// 8: 270° 顺时针rotateDegrees := map[int]int{1: 0,3: 180,6: 90,8: 270,}value, err := orientation.Int(0)if err != nil {log.Fatalf("failed to parse orientation value: %v", err)}fmt.Printf("Rotate degrees: %d\n", rotateDegrees[value])return rotateDegrees[value]
}
// 直接旋转图片
func setRotate(angle int) {// 打开源图像文件startTime := time.Now()srcImage, err := imaging.Open("image-out.jpg")if err != nil {log.Fatalf("failed to open image: %v", err)}fmt.Println(angle)rotatedImage := imaging.Rotate(srcImage, float64(angle), image.Transparent)// 保存旋转后的图像err = imaging.Save(rotatedImage, "rotated_image.jpg")if err != nil {log.Fatalf("failed to save image: %v", err)}log.Println("Image rotated and saved to rotated_image.jpg", time.Since(startTime).Milliseconds())}
�