NPOI EXCEL 插入图片 进行压缩。
时间: 2023-09-06 13:11:30 浏览: 187
在 NPOI 中,可以通过 `POI.Util` 命名空间中的 `JPEGCompress` 类对插入的图片进行压缩。具体实现步骤如下:
1. 创建 `HSSFWorkbook` 对象并加载 Excel 文件,例如:
```csharp
HSSFWorkbook workbook = new HSSFWorkbook(new FileStream("test.xls", FileMode.Open));
```
2. 获取要插入图片的 `HSSFPatriarch` 对象,例如:
```csharp
HSSFSheet sheet = (HSSFSheet)workbook.GetSheetAt(0);
HSSFPatriarch patriarch = (HSSFPatriarch)sheet.CreateDrawingPatriarch();
```
3. 创建 `HSSFClientAnchor` 对象,设置图片插入位置和大小,例如:
```csharp
HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 0, 0, 1, 1, 5, 10);
```
其中,前四个参数分别表示图片左上角的 x 坐标、y 坐标、右下角的 x 坐标、y 坐标,后四个参数分别表示单元格的起始行、起始列、终止行、终止列。
4. 加载图片文件,创建 `HSSFPicture` 对象,例如:
```csharp
FileStream file = new FileStream("test.jpg", FileMode.Open);
byte[] buffer = new byte[file.Length];
file.Read(buffer, 0, (int)file.Length);
int pictureIndex = workbook.AddPicture(buffer, PictureType.JPEG);
HSSFPicture picture = (HSSFPicture)patriarch.CreatePicture(anchor, pictureIndex);
```
其中,`AddPicture` 方法将图片文件加载为字节数组,然后使用 `workbook.AddPicture` 方法将图片插入 Excel 文件,返回图片索引,最后使用 `patriarch.CreatePicture` 方法创建 `HSSFPicture` 对象。
5. 使用 `POI.Util.JPEGCompress` 类对图片进行压缩,例如:
```csharp
POI.Util.JPEGCompress compress = new POI.Util.JPEGCompress();
compress.CompressPicture(picture.PictureData.Data, picture.PictureData.PictureType, 0.5f);
```
其中,`CompressPicture` 方法的第一个参数为图片数据的字节数组,第二个参数为图片类型,第三个参数为压缩比例,取值范围为 0.0 到 1.0。
6. 保存 Excel 文件,例如:
```csharp
FileStream saveFile = new FileStream("test_result.xls", FileMode.Create);
workbook.Write(saveFile);
saveFile.Close();
```
完整代码示例:
```csharp
HSSFWorkbook workbook = new HSSFWorkbook(new FileStream("test.xls", FileMode.Open));
HSSFSheet sheet = (HSSFSheet)workbook.GetSheetAt(0);
HSSFPatriarch patriarch = (HSSFPatriarch)sheet.CreateDrawingPatriarch();
HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 0, 0, 1, 1, 5, 10);
FileStream file = new FileStream("test.jpg", FileMode.Open);
byte[] buffer = new byte[file.Length];
file.Read(buffer, 0, (int)file.Length);
int pictureIndex = workbook.AddPicture(buffer, PictureType.JPEG);
HSSFPicture picture = (HSSFPicture)patriarch.CreatePicture(anchor, pictureIndex);
POI.Util.JPEGCompress compress = new POI.Util.JPEGCompress();
compress.CompressPicture(picture.PictureData.Data, picture.PictureData.PictureType, 0.5f);
FileStream saveFile = new FileStream("test_result.xls", FileMode.Create);
workbook.Write(saveFile);
saveFile.Close();
```
希望这个回答能对您有所帮助!
阅读全文