验证图片旋转

最近在使用百度图片翻译时遇到一个问题,就是图片会翻转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())

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值