NPOI获取图片详细信息
来源:互联网 发布:mac登录不上apple id 编辑:程序博客网 时间:2024/05/16 06:05
参考韩兆新的博客园http://www.cnblogs.com/hanzhaoxin/p/4442369.html
NPOI提供了非常方便的方法IWorkbook.GetAllPictures(),这个方法返回的是一个IList,里面的数据是HSSFPictureData类型的。
IWorkbook hssfworkbook;
...
IList pictures = hssfworkbook.GetAllPictures();
int i = 0;
foreach (HSSFPictureData pic in pictures)
{
string ext = pic.SuggestFileExtension();
if(ext.Equals("jpeg"))
{
Image jpg = Image.FromStream(new MemoryStream(pic.Data));
jpg.Save(string.Format("pic{0}.jpg",i++));
}
if (ext.Equals("png"))
{
Image png = Image.FromStream(new MemoryStream(pic.Data));
png.Save(string.Format("pic{0}.png",i++));
}
}
但只能获取图片扩展名信息,但实际需求是导入数据需要获得图片的行列
参考韩兆新的博客园http://www.cnblogs.com/hanzhaoxin/p/4442369.html ,可获取行列数据
public class PicturesInfo { public string ext { get; set; } public int MinRow { get; set; } public int MaxRow { get; set; } public int MinCol { get; set; } public int MaxCol { get; set; } public Byte[] PictureData { get; private set; } public PicturesInfo(int minRow, int maxRow, int minCol, int maxCol, Byte[] pictureData, string ext) { this.MinRow = minRow; this.MaxRow = maxRow; this.MinCol = minCol; this.MaxCol = maxCol; this.PictureData = pictureData; this.ext = ext; } } public static class NpoiExtend { public static List<PicturesInfo> GetAllPictureInfos(this ISheet sheet) { return sheet.GetAllPictureInfos(null, null, null, null); } public static List<PicturesInfo> GetAllPictureInfos(this ISheet sheet, int? minRow, int? maxRow, int? minCol, int? maxCol, bool onlyInternal = true) { if (sheet is HSSFSheet) { return GetAllPictureInfos((HSSFSheet)sheet, minRow, maxRow, minCol, maxCol, onlyInternal); } else if (sheet is XSSFSheet) { return GetAllPictureInfos((XSSFSheet)sheet, minRow, maxRow, minCol, maxCol, onlyInternal); } else { throw new Exception("未处理类型,没有为该类型添加:GetAllPicturesInfos()扩展方法!"); } } private static List<PicturesInfo> GetAllPictureInfos(HSSFSheet sheet, int? minRow, int? maxRow, int? minCol, int? maxCol, bool onlyInternal) { List<PicturesInfo> picturesInfoList = new List<PicturesInfo>(); var shapeContainer = sheet.DrawingPatriarch as HSSFShapeContainer; if (null != shapeContainer) { var shapeList = shapeContainer.Children; foreach (var shape in shapeList) { if (shape is HSSFPicture && shape.Anchor is HSSFClientAnchor) { var picture = (HSSFPicture)shape; var anchor = (HSSFClientAnchor)shape.Anchor; if (IsInternalOrIntersect(minRow, maxRow, minCol, maxCol, anchor.Row1, anchor.Row2, anchor.Col1, anchor.Col2, onlyInternal)) { picturesInfoList.Add(new PicturesInfo(anchor.Row1, anchor.Row2, anchor.Col1, anchor.Col2, picture.PictureData.Data,picture.PictureData.MimeType)); } } } } return picturesInfoList; } private static List<PicturesInfo> GetAllPictureInfos(XSSFSheet sheet, int? minRow, int? maxRow, int? minCol, int? maxCol, bool onlyInternal) { List<PicturesInfo> picturesInfoList = new List<PicturesInfo>(); var documentPartList = sheet.GetRelations(); foreach (var documentPart in documentPartList) { if (documentPart is XSSFDrawing) { var drawing = (XSSFDrawing)documentPart; var shapeList = drawing.GetShapes(); foreach (var shape in shapeList) { if (shape is XSSFPicture) { var picture = (XSSFPicture)shape; var anchor = picture.GetPreferredSize(); if (IsInternalOrIntersect(minRow, maxRow, minCol, maxCol, anchor.Row1, anchor.Row2, anchor.Col1, anchor.Col2, onlyInternal)) { picturesInfoList.Add(new PicturesInfo(anchor.Row1, anchor.Row2, anchor.Col1, anchor.Col2, picture.PictureData.Data,picture.PictureData.MimeType)); } } } } } return picturesInfoList; } private static bool IsInternalOrIntersect(int? rangeMinRow, int? rangeMaxRow, int? rangeMinCol, int? rangeMaxCol, int pictureMinRow, int pictureMaxRow, int pictureMinCol, int pictureMaxCol, bool onlyInternal) { int _rangeMinRow = rangeMinRow ?? pictureMinRow; int _rangeMaxRow = rangeMaxRow ?? pictureMaxRow; int _rangeMinCol = rangeMinCol ?? pictureMinCol; int _rangeMaxCol = rangeMaxCol ?? pictureMaxCol; if (onlyInternal) { return (_rangeMinRow <= pictureMinRow && _rangeMaxRow >= pictureMaxRow && _rangeMinCol <= pictureMinCol && _rangeMaxCol >= pictureMaxCol); } else { return ((Math.Abs(_rangeMaxRow - _rangeMinRow) + Math.Abs(pictureMaxRow - pictureMinRow) >= Math.Abs(_rangeMaxRow + _rangeMinRow - pictureMaxRow - pictureMinRow)) && (Math.Abs(_rangeMaxCol - _rangeMinCol) + Math.Abs(pictureMaxCol - pictureMinCol) >= Math.Abs(_rangeMaxCol + _rangeMinCol - pictureMaxCol - pictureMinCol))); } } }
- NPOI获取图片详细信息
- UIImagePickerController获取图片详细信息
- flex加载本地图片怎么获取到图片的详细信息
- 数据库获取图片 加入幻灯效果 点击查看详细信息
- android actionbar中share使用、图片详细信息获取
- 获取系统版本详细信息
- 获取order的详细信息
- edid 获取显示器详细信息
- Android获取摄像头详细信息
- Android获取摄像头详细信息
- 获取硬盘的详细信息
- 获取系统各种详细信息
- 获取手机的详细信息
- PHP 获取服务器详细信息
- 获取异常的详细信息
- 获取表中列的详细信息
- 获取硬盘的详细信息
- 获取异常详细信息
- 更新自己编译android源码遇到的问题
- getRawX、getRawY与getX、getY以及View中的getScrollX、getScrollY
- Python 2.7 执行某一程序并获取PID
- PHP 连接 MySQL(MySQLi方式)
- Item12 Declare overriding function override
- NPOI获取图片详细信息
- RecycleView划线操作
- MySQL常用命令详解
- MyBatis的动态SQL详解
- GIT用法及简介
- Android动画机制与使用技巧
- MATLAB中 diff 函数的用法
- leetcode中字符串转化为数字
- Intent五中启动其它Activity的方式