插入图片主方法代码:

 1 /// <summary>
 2 /// 插入图片
 3 /// </summary>
 4 /// <param name="worksheet"></param>
 5 /// <param name="imageBytes"></param>
 6 /// <param name="rowNum"></param>
 7 /// <param name="columnNum"></param>
 8 /// <param name="autofit"></param>
 9 public static void InsertImage(ExcelWorksheet worksheet, byte[] imageBytes, int rowNum, int columnNum, bool autofit)
10 {
11     using (var image = Image.FromStream(new MemoryStream(imageBytes)))
12     {
13         var picture = worksheet.Drawings.AddPicture($"image_{DateTime.Now.Ticks}", image);
14         var cell = worksheet.Cells[rowNum, columnNum];
15         int cellColumnWidthInPix = GetWidthInPixels(cell);
16         int cellRowHeightInPix = GetHeightInPixels(cell);
17         int adjustImageWidthInPix = cellColumnWidthInPix;
18         int adjustImageHeightInPix = cellRowHeightInPix;
19         if (autofit)
20         {
21             //图片尺寸适应单元格
22             var adjustImageSize = GetAdjustImageSize(image, cellColumnWidthInPix, cellRowHeightInPix);
23             adjustImageWidthInPix = adjustImageSize.Item1;
24             adjustImageHeightInPix = adjustImageSize.Item2;
25         }
26         //设置为居中显示
27         int columnOffsetPixels = (int)((cellColumnWidthInPix - adjustImageWidthInPix) / 2.0);
28         int rowOffsetPixels = (int)((cellRowHeightInPix - adjustImageHeightInPix) / 2.0);
29         picture.SetSize(adjustImageWidthInPix, adjustImageHeightInPix);
30         picture.SetPosition(rowNum - 1, rowOffsetPixels, columnNum - 1, columnOffsetPixels);
31     }
32 }

 

GetAdjustImageSize方法:

 1 /// <summary>
 2 /// 获取自适应调整后的图片尺寸
 3 /// </summary>
 4 /// <param name="image"></param>
 5 /// <param name="cellColumnWidthInPix"></param>
 6 /// <param name="cellRowHeightInPix"></param>
 7 /// <returns>item1:调整后的图片宽度; item2:调整后的图片高度</returns>
 8 private static Tuple<int, int> GetAdjustImageSize(Image image, int cellColumnWidthInPix, int cellRowHeightInPix)
 9 {
10     int imageWidthInPix = image.Width;
11     int imageHeightInPix = image.Height;
12     //调整图片尺寸,适应单元格
13     int adjustImageWidthInPix;
14     int adjustImageHeightInPix;
15     if (imageHeightInPix * cellColumnWidthInPix > imageWidthInPix * cellRowHeightInPix)
16     {
17         //图片高度固定,宽度自适应
18         adjustImageHeightInPix = cellRowHeightInPix;
19         double ratio = (1.0) * adjustImageHeightInPix / imageHeightInPix;
20         adjustImageWidthInPix = (int)(imageWidthInPix * ratio);
21     }
22     else
23     {
24         //图片宽度固定,高度自适应
25         adjustImageWidthInPix = cellColumnWidthInPix;
26         double ratio = (1.0) * adjustImageWidthInPix / imageWidthInPix;
27         adjustImageHeightInPix = (int)(imageHeightInPix * ratio);
28     }
29     return new Tuple<int, int>(adjustImageWidthInPix, adjustImageHeightInPix);
30 }
View Code

相关文章:

  • 2021-05-24
  • 2022-12-23
  • 2021-04-07
  • 2021-12-12
  • 2021-11-19
  • 2022-02-08
  • 2021-07-17
  • 2022-01-25
猜你喜欢
  • 2021-07-30
  • 2021-12-12
相关资源
相似解决方案