java按照图片尺寸插入excel,使图片不失真
公司要做导出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,使图片不失真相关推荐
- Java向word中插入Excel文件对象
前言: 在word文件中,虽然也有表格.但是有时我们想要将Excel中表格的大量数据直接插入到word文档中,这就需要用到word的插入对象的功能,也就是直接将Excel文件当做对象插入到word中. ...
- 怎么更改图片尺寸?怎么修改图片的长宽尺寸?
在实际应用中,我们常常需要将图片改大小(https://www.yasuotu.com/size),以适应不同的场景和需求,比如在制作海报.PPT等场合,修改图片尺寸后使其更适合展现,下面小编就带大家 ...
- background-image属性设置图片尺寸_Matlab | 批量修改图片尺寸及图片灰度化
介绍: 在情绪认知的心理学实验中,我们从不同的人脸图片库获取实验所需的实验材料.在正式使用之前往往需要对人脸进行预处理,以控制无关变量对实验结果的影响.常见的预处理有将图片修改为统一尺寸.灰度化.本文 ...
- 如何改变图片尺寸?怎么调整图片大小?
怎么调整图片大小?当我们遇到图片尺寸过大时可以利用压缩图的图片改大小(https://www.yasuotu.com/size)功能来修改图片尺寸,一起来看看具体步骤. 1.进入压缩图首页选择图片改大 ...
- 电脑如何修改图片尺寸大小?怎么图片改大小?
在电脑如何修改图片尺寸大小?遇到这种情况我们可以使用压缩图的图片改大小功能,可以直接图片改大小在线处理,非常方便,下面来看看具体步骤吧. 1.使用电脑浏览器打开压缩图选择图片改大小. 2.上传需要修 ...
- python 修改图片尺寸_Python实现更改图片尺寸大小的方法(基于Pillow包)
本文实例讲述了Python实现更改图片尺寸大小的方法.分享给大家供大家参考,具体如下: 1.PIL包推荐Pillow. 2.源码: #encoding=utf-8 #author: walker #d ...
- 实用脚本分享01:opencv拍摄视频、抽帧、合帧、批量改图片尺寸、批量改图片格式
目录 一.基于opencv拍摄视频并保存 二.对视频抽帧 三.对图片进行合帧 四.更改图片尺寸 五.批量更改图片格式,如jpg转化为png.png转jpeg 一.基于opencv拍摄视频并保存 imp ...
- java html 转图片_Java 将Excel转为图片、html、XPS、XML、CSV
通过文档格式转换,可满足不同办公场合对文档操作的需求.本文将介绍转换Excel文档为其他常见文档格式的方法.通过文中的方法,可支持将Excel转换为包括PDF.图片.html.XPS.XML.CSV. ...
- java向word中插入Excel附件
1.word中插入对象的原理 编辑word,向word中插入图片.EXCEL.WORD等附件,再将word保存为xml格式,通过XML查看工具打开xml格式的word的源码,通过对比源码, 可以发现平 ...
最新文章
- javascript 事件对象
- python的应用领域-Python的应用领域
- HDU-2612 Find a way
- 优化杭州某著名电子商务网站高并发千万级大型数据库经验之- 磁盘I/O性能
- 用Delphi设计能携带附件的EMail
- cpci检索为什么那么慢_索引原理与慢查询优化
- FtpWebRequest.UsePassive属性:设置FTP工作模式
- ubuntu 配置Thinkpad T400 的小红点(trackpad)
- sql 语句高级用法常用合集
- 程序员泪流满面的瞬间,第三季
- 1010001b 1101110b怎么用计算机,计算机组成原理计算题
- eclipes 快捷键操作:
- 2020第八届“泰迪杯”特等奖(基于 BERT 深度语言模型的“智慧政务”文本挖掘应用)
- 基于Springboot的大学生社团管理系统
- cPanel创建数据库教程
- 计算机语言表示教师节快乐,教师节快乐的祝福语38句
- 沙盘软件测试题,Sandboxie沙盘工具,免费的沙盒虚拟环境软件、隔离测试、多开程序...
- 玉米系统和秋叶系统哪个好_房产中介系统哪个好,房地产管理行业系统价格
- linux运行微软运行库,Windows Desktop Runtime(微软官方运行库) V3.1.6
- html垂直居中方案及示例