C# 检测图片是否被旋转并修改到正真的旋转

一、在利用jpg合并pdf的过程中发现大量的图片旋转,用看图软件打开旋转的照片发现是正常的,经过对比发现这些照片的image.PropertyItems.Value[0]值和没有发生旋转的照片有差异。故而写了下面的函数处理。

点击查看代码
/// <summary>
        /// C# 检测图片是否被旋转并修改到正真的旋转
        /// </summary>
        /// <param name="path"></param>
        /// <returns></returns>
        public static bool readPictureDegreeAndKiRotate(string path)
        {
            bool bl = false;
            try
            {
                //获取旋转角度
                int rotate = 0;
                using (var image = System.Drawing.Image.FromFile(path))
                {
                    foreach (var prop in image.PropertyItems)
                    {
                        if (prop.Id == 0x112)
                        {
                            if (prop.Value[0] == 6)
                                rotate = 90;
                            if (prop.Value[0] == 8)
                                rotate = -90;
                            if (prop.Value[0] == 3)
                                rotate = 180;
                            prop.Value[0] = 1;
                        }
                    }
                }

                //旋转图片

                using (Bitmap bitmap = new Bitmap(path))
                {
                    RotateFlipType rotateFlipType = new RotateFlipType();
                    if (rotate == 90)
                    {
                        rotateFlipType = RotateFlipType.Rotate90FlipNone;
                        bitmap.RotateFlip(rotateFlipType);
                        bitmap.Save(path);
                    }
                    else if (rotate == -90)
                    {
                        rotateFlipType = RotateFlipType.Rotate270FlipNone;
                        bitmap.RotateFlip(rotateFlipType);
                        bitmap.Save(path);
                    }
                    else if (rotate == 180)
                    {
                        rotateFlipType = RotateFlipType.Rotate180FlipNone;
                        bitmap.RotateFlip(rotateFlipType);
                        bitmap.Save(path);
                    }
                    
                    bitmap.Dispose();
                }

                bl = true;

            }
            catch (Exception ex)
            {
              
                bl = false;
            }
            return bl;
        }
posted @   XYSGIS  阅读(144)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
点击右上角即可分享
微信分享提示