使用iTextSharp的Image.GetInstance加载竖版图片时出现旋转问题的求助
解决iText中Image.GetInstance导致竖版图片旋转的问题
我之前也踩过完全一样的坑!这事儿根源在图片的EXIF方向元数据上——很多手机拍的竖版照片,实际存储的像素尺寸是宽大于高(比如你这张2016×1512),但EXIF里会标记一个旋转角度(比如90度),系统相册这类工具会自动根据这个标记旋转显示,让你看到竖版效果。但Image.GetInstance()方法默认会解析这个EXIF标记并自动旋转图片,结果反而和你预期的显示方向相反了。
给你两个靠谱的解决方案:
方案一:手动反转旋转角度
加载图片后,检查它的旋转度数,再调整回来,同时交换宽高(因为旋转后尺寸会互换):
string imagepath = AttachmentURL + answer.Attachment.AzureFileName; Image image = Image.GetInstance(imagepath); // 如果图片被自动旋转了,就转回去 if (image.RotationDegrees != 0) { image.RotationDegrees = -image.RotationDegrees; // 交换宽高,修正尺寸显示 float tempWidth = image.Width; image.Width = image.Height; image.Height = tempWidth; }
方案二:加载时禁用EXIF自动旋转
如果不想让iText自动处理EXIF方向,可以用ImageReader直接读取原始图片字节,避免自动旋转:
using (var imageReader = new ImageReader(imagepath)) { // 读取原始图片数据,不应用EXIF旋转 byte[] rawImageBytes = imageReader.ReadImage(); Image image = Image.GetInstance(rawImageBytes); // 这里如果需要的话,可以自己读取EXIF方向手动处理 }
需要注意的是,不同版本的iText在EXIF处理上可能略有差异,如果你用的是iText 7,ImageReader的用法可能会有小调整,但核心思路是一致的——要么修正自动旋转后的结果,要么跳过自动旋转逻辑。
内容的提问来源于stack exchange,提问作者Khen
相关产品推荐
相关产品推荐

