You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 19:54:08