java将图片按照原尺寸比例存入word中

2022-03-28 20:18:52 浏览数 (2)

在使用poi往word里面插入图片时可以使用

代码语言:javascript复制
XWPFParagraph.insertNewRun(i).addPicture(InputStream pictureData, int pictureType, String filename, int width, int height)方法

但是为了使得插入word中的图片按照原图尺寸进行等比例缩放,我们必须必须获得原图的尺寸,常用的方法就是通过

代码语言:javascript复制
javax.imageio.ImageIO.read(InputStream input)方法读取图片信息,这样就会涉及到两次图片读写,为了减少不必要的网络通信,我们可以使用下面的方式进行优化:
代码语言:javascript复制
URL url = new URL(runText);
                                byte[] bytes = IOUtils.toByteArray(url.openStream());
                                ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
                                BufferedImage img = javax.imageio.ImageIO.read(bis);
                                int width = img.getWidth();
                                int height = img.getHeight();
                                //下面按照图片的实际大小进行同比例缩放
                                int picHeight = 300;
                                int picWidth = picHeight * width/height;
                                //下次读取该ByteArrayInputStream 之前一定要调用reset进行复位,这样才能读到图片所有数据
                                bis.reset();
                                para.insertNewRun(i).addPicture(bis,
                                        XWPFDocument.PICTURE_TYPE_JPEG, url.getFile(), Units.toEMU(picWidth), Units.toEMU(picHeight));

好了,上面就是通过ByteArrayInputStream来减少网络通信次数的。

0 人点赞