公司要做导出excel功能,excel中要插入图表图片,研究了一下如何按照图片的尺寸插入excel,尽量使图片不失真

 public static int savePic1(HSSFSheet sheet, HSSFWorkbook workbook, String fileUrl) throws Exception {BufferedImage bufferImg = null;ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();try {//excel的画图,一个sheet只能获取一个HSSFPatriarch patriarch = sheet.createDrawingPatriarch();//bufferImg = ImageIO.read(inputStream);//直接使用ImageIo.read方式会使图片蒙层Image image = Toolkit.getDefaultToolkit().getImage(fileUrl);//有缓存,需要加入这个丢弃之前的缓存image.flush();bufferImg = toBufferedImage(image);ImageIO.write(bufferImg, "jpg", byteArrayOut);//从数据的下面两行插入图片,由于使用 sheet.getLastRowNum(),所以该方式插入图片必须在数据下,并且一次只能插入一张图片,否则图片会重叠,如果同时插入多张图片则需手动计算行号int cellNum = sheet.getLastRowNum() + 3;//以像素计算列宽,列宽=列宽像素数/(96/2.54)long col2 = Math.round((bufferImg.getWidth() / (96 / 2.54)) / (sheet.getColumnWidthInPixels(cellNum) / (96 / 2.54)));//通过图片的高度计算行序号//行高:以磅为单位。即行高是等于 Hight/28.35 厘米int row2 = (int) Math.round((bufferImg.getHeight() / (96 / 2.54)) / (sheet.getDefaultRowHeightInPoints() / 28.35) + cellNum);creatPic(0, 0, 0, 0, (short) 0, cellNum, (short) col2, row2, patriarch, workbook, byteArrayOut);return row2;} catch (Exception e) {e.printStackTrace();throw new Exception("插入图片失败");} finally {byteArrayOut.close();}}/*** @param dx1          起始单元格的x偏移量,表示直线起始位置距单元格左侧的距离;* @param dy1          起始单元格的y偏移量,表示直线起始位置距单元格上侧的距离;* @param dx2          终止单元格的x偏移量,表示直线终止位置距单元格右侧的距离;* @param dy2          终止单元格的y偏移量,表示直线终止位置距单元格下侧的距离;* @param col1         起始单元格列序号,从0开始计算;* @param row1         起始单元格行序号,从0开始计算, col1=0,row1=0就表示起始单元格为A1;* @param col2         终止单元格列序号,从0开始计算;* @param row2         终止单元格行序号,从0开始计算, col2=2,row2=2就表示终止单元格为C3;* @param patriarch    Excel画图工具* @param workbook     Excel的工作书册* @param byteArrayOut 图片输出流*/public static void creatPic(int dx1, int dy1, int dx2, int dy2, short col1, int rou1, short col2, int row2, HSSFPatriarch patriarch, HSSFWorkbook workbook, ByteArrayOutputStream byteArrayOut) {HSSFClientAnchor anchor = new HSSFClientAnchor(dx1, dy1, dx2, dy2, (short) col1, rou1, (short) col2, row2);//一次加入多张图片则再次new XSSFClientAnchoranchor.setAnchorType(ClientAnchor.AnchorType.DONT_MOVE_AND_RESIZE);//插入图片patriarch.createPicture(anchor, workbook.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));}/*** Image转为BufferedImage** @param image* @return*/public static BufferedImage toBufferedImage(Image image) {if (image instanceof BufferedImage) {return (BufferedImage) image;}// This code ensures that all the pixels in the image are loadedimage = new ImageIcon(image).getImage();BufferedImage bimage = null;GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();try {int transparency = Transparency.OPAQUE;GraphicsDevice gs = ge.getDefaultScreenDevice();GraphicsConfiguration gc = gs.getDefaultConfiguration();bimage = gc.createCompatibleImage(image.getWidth(null),image.getHeight(null), transparency);} catch (HeadlessException e) {//使用了获取图形界面的方法,ge.getDefaultScreenDevice(),会抛出HeadlessException异常}if (bimage == null) {// Create a buffered image using the default color modelint type = BufferedImage.TYPE_INT_RGB;bimage = new BufferedImage(image.getWidth(null),image.getHeight(null), type);}// Copy image to buffered imageGraphics g = bimage.createGraphics();// Paint the image onto the buffered imageg.drawImage(image, 0, 0, null);g.dispose();return bimage;}

java按照图片尺寸插入excel,使图片不失真相关推荐

  1. Java向word中插入Excel文件对象

    前言: 在word文件中,虽然也有表格.但是有时我们想要将Excel中表格的大量数据直接插入到word文档中,这就需要用到word的插入对象的功能,也就是直接将Excel文件当做对象插入到word中. ...

  2. 怎么更改图片尺寸?怎么修改图片的长宽尺寸?

    在实际应用中,我们常常需要将图片改大小(https://www.yasuotu.com/size),以适应不同的场景和需求,比如在制作海报.PPT等场合,修改图片尺寸后使其更适合展现,下面小编就带大家 ...

  3. background-image属性设置图片尺寸_Matlab | 批量修改图片尺寸及图片灰度化

    介绍: 在情绪认知的心理学实验中,我们从不同的人脸图片库获取实验所需的实验材料.在正式使用之前往往需要对人脸进行预处理,以控制无关变量对实验结果的影响.常见的预处理有将图片修改为统一尺寸.灰度化.本文 ...

  4. 如何改变图片尺寸?怎么调整图片大小?

    怎么调整图片大小?当我们遇到图片尺寸过大时可以利用压缩图的图片改大小(https://www.yasuotu.com/size)功能来修改图片尺寸,一起来看看具体步骤. 1.进入压缩图首页选择图片改大 ...

  5. 电脑如何修改图片尺寸大小?怎么图片改大小?

    ​在电脑如何修改图片尺寸大小?遇到这种情况我们可以使用压缩图的图片改大小功能,可以直接图片改大小在线处理,非常方便,下面来看看具体步骤吧. 1.使用电脑浏览器打开压缩图选择图片改大小. 2.上传需要修 ...

  6. python 修改图片尺寸_Python实现更改图片尺寸大小的方法(基于Pillow包)

    本文实例讲述了Python实现更改图片尺寸大小的方法.分享给大家供大家参考,具体如下: 1.PIL包推荐Pillow. 2.源码: #encoding=utf-8 #author: walker #d ...

  7. 实用脚本分享01:opencv拍摄视频、抽帧、合帧、批量改图片尺寸、批量改图片格式

    目录 一.基于opencv拍摄视频并保存 二.对视频抽帧 三.对图片进行合帧 四.更改图片尺寸 五.批量更改图片格式,如jpg转化为png.png转jpeg 一.基于opencv拍摄视频并保存 imp ...

  8. java html 转图片_Java 将Excel转为图片、html、XPS、XML、CSV

    通过文档格式转换,可满足不同办公场合对文档操作的需求.本文将介绍转换Excel文档为其他常见文档格式的方法.通过文中的方法,可支持将Excel转换为包括PDF.图片.html.XPS.XML.CSV. ...

  9. java向word中插入Excel附件

    1.word中插入对象的原理 编辑word,向word中插入图片.EXCEL.WORD等附件,再将word保存为xml格式,通过XML查看工具打开xml格式的word的源码,通过对比源码, 可以发现平 ...

最新文章

  1. javascript 事件对象
  2. python的应用领域-Python的应用领域
  3. HDU-2612 Find a way
  4. 优化杭州某著名电子商务网站高并发千万级大型数据库经验之- 磁盘I/O性能
  5. 用Delphi设计能携带附件的EMail
  6. cpci检索为什么那么慢_索引原理与慢查询优化
  7. FtpWebRequest.UsePassive属性:设置FTP工作模式
  8. ubuntu 配置Thinkpad T400 的小红点(trackpad)
  9. sql 语句高级用法常用合集
  10. 程序员泪流满面的瞬间,第三季
  11. 1010001b 1101110b怎么用计算机,计算机组成原理计算题
  12. eclipes 快捷键操作:
  13. 2020第八届“泰迪杯”特等奖(基于 BERT 深度语言模型的“智慧政务”文本挖掘应用)
  14. 基于Springboot的大学生社团管理系统
  15. cPanel创建数据库教程
  16. 计算机语言表示教师节快乐,教师节快乐的祝福语38句
  17. 沙盘软件测试题,Sandboxie沙盘工具,免费的沙盒虚拟环境软件、隔离测试、多开程序...
  18. 玉米系统和秋叶系统哪个好_房产中介系统哪个好,房地产管理行业系统价格
  19. linux运行微软运行库,Windows Desktop Runtime(微软官方运行库) V3.1.6
  20. html垂直居中方案及示例

热门文章

  1. Java开发入门——三大平台的介绍
  2. 微信小程序访问手机蓝牙需要用户授权解决办法
  3. microblaze
  4. AI 轻松实现动漫角色转换真人,《飞屋环游记》中的小罗竟酷似他……
  5. 建站前的几大禁忌,你是否做到
  6. 【Redis高手修炼之路】Redis的持久化——ROB和AOF持久化机制
  7. ROM、RAM、SRAM、DRAM、Flash、SDRAM区别
  8. 图片拼接镶嵌算法(image spline and mosaics经典算法)实现过程和效果展示
  9. 百练4115 鸣人和佐助(变式BFS)
  10. 用户管理系统 + 口算练习