图像读取Exif小知识,图像扶正,还原拍摄时的角度
2024-10-01 08:50:53
在做人脸识别的时候发现很多手机拍摄的图像在C#读取之后方向出现了错误,Bitmap中的宽度和实际的windows的文件属性内的参数相反,引起一阵测试和思考,后来百度出来可以用Exif来解决
github有相关Exif介绍
https://github.com/dlemstra/Magick.NET/blob/784e23b1f5c824fc03d4b95d3387b3efe1ed510b/Magick.NET/Core/Profiles/Exif/ExifTag.cs
维基百科也有说明
https://en.wikipedia.org/wiki/Exif
实际代码是
/// <summary>
/// 根据图片exif调整方向
/// </summary>
/// <param name="sm"></param>
/// <returns></returns>
public static Bitmap RotateImage(Stream sm)
{
Image img = Image.FromStream(sm);
var exif = img.PropertyItems;
byte orien = ;
var item = exif.Where(m => m.Id == ).ToArray();
if (item.Length > )
orien = item[].Value[];
switch (orien)
{
case :
img.RotateFlip(RotateFlipType.RotateNoneFlipX);//horizontal flip
break;
case :
img.RotateFlip(RotateFlipType.Rotate180FlipNone);//right-top
break;
case :
img.RotateFlip(RotateFlipType.RotateNoneFlipY);//vertical flip
break;
case :
img.RotateFlip(RotateFlipType.Rotate90FlipX);
break;
case :
img.RotateFlip(RotateFlipType.Rotate90FlipNone);//right-top
break;
case :
img.RotateFlip(RotateFlipType.Rotate270FlipX);
break;
case :
img.RotateFlip(RotateFlipType.Rotate270FlipNone);//left-bottom
break;
default:
break;
}
return (Bitmap)img;
}
最新文章
- wxWidgets
- Html命名锚
- android开机过程简单描述
- MATLAB常用操作
- lucene-查询query->;FuzzyQuery相近词语的搜索
- 我所了解的WEB开发(3) - 彩虹的颜色
- javascript --- Ajax基础
- Knockout Grid - Loading Remote Data
- 160901、在大型项目中组织CSS
- Hibernate各种主键生成策略与配置详解【附1--<;generator class=";foreign";>;】
- delphi高手突破学习笔记之面向对象类和对象的本质
- Android SurfaceView实战 打造抽奖转盘
- [04] Object类
- C++ 非常量引用无效
- ListView 控件和 INotifyPropertyChanged 接口
- C# 中的await
- (转)Ubuntu12.04上NFS Server安装使用过程
- U3D优化
- Java的Statement、PreparedStatement、PreparedStatement + 批处理 的区别
- Java虚拟机内存模型和volatile型变量