获取图片的高度和宽度

java.io.File file = new java.io.File("./aa.jpg")); 
java.awt.image.BufferedImage bi = javax.imageio.ImageIO.read(file); 
bi.getWidth(); //获得 宽度 
bi.getHeight() ;//获得 高度 

或者: 

new ImageIcon(img).getImage().getHeight(observer

<think>我们正在使用Apache POI处理Excel文件,特别是XSSF格式(.xlsx)。用户想知道如何从XSSFPicture对象获取图片宽度高度信息。根据引用,我们知道XSSFPicture对象代表插入到工作表中的图片。但是,XSSFPicture本身并不直接提供获取原始图片宽度高度的方法。我们需要从工作簿中获取图片数据,然后读取图片的原始尺寸。步骤:1.通过XSSFPicture对象的getPictureData()方法获取XSSFPictureData,它包含了图片的原始数据。2.从XSSFPictureData获取图片的字节数组。3.使用Java的图像处理库(如ImageIO)读取字节数组,得到一个BufferedImage。4.从BufferedImage获取宽度高度。但是,需要注意的是,在Excel中插入图片时,图片可能被缩放或调整大小。上面的方法获取的是图片的原始尺寸,而不是在Excel中显示的大小。如果用户需要的是在Excel中显示的尺寸(即经过缩放后的尺寸),则需要通过XSSFPicture的getImageDimension()方法获取,该方法返回一个java.awt.Dimension对象,包含显示时的宽度高度(以点为单位)。因此,我们需要明确用户的需求:-获取原始图片尺寸?还是获取在Excel中显示的尺寸?根据问题描述,用户说“获取图片高度宽度信息”,没有特别指明是原始尺寸还是显示尺寸,但通常我们可能需要原始尺寸,或者两者都需要。另外,引用[3]提到了图片尺寸从像素到幻灯片尺寸的百分比,但我们的场景是Excel,不是幻灯片(PPT)。不过,原理类似,在Excel中图片的位置大小由ClientAnchor决定,而显示尺寸可以通过getImageDimension获得。因此,我们可以提供两种方式:方式一:获取原始图片尺寸(像素)方式二:获取在Excel中显示的尺寸(点,1点=1/72英寸)代码示例:假设我们已经有一个XSSFPicture对象,命名为picture。1.获取原始图片尺寸(像素):XSSFPictureDatapictureData= picture.getPictureData();byte[] data= pictureData.getData();InputStreamin= newByteArrayInputStream(data);BufferedImage image= ImageIO.read(in);intoriginalWidth =image.getWidth();//原始宽度(像素)intoriginalHeight= image.getHeight(); //原始高度(像素)2.获取在Excel中显示的尺寸(点):Dimensiondimension= picture.getImageDimension();doubledisplayWidth= dimension.getWidth();//显示宽度(点)double displayHeight =dimension.getHeight();//显示高度(点)注意:getImageDimension()方法返回的是显示尺寸,单位是点(point),这是一个绝对长度单位。但是,需要注意的是,如果图片在插入后没有被缩放(即保持原始大小),那么显示尺寸与原始尺寸在数值上可能不同,因为单位不同(像素与点)。而且,原始尺寸是像素,而显示尺寸是点,两者之间需要转换(需要知道图片的DPI,但通常我们假设屏幕DPI为72,则1点=1像素,但这并不准确,因为图片可能有自己的DPI设置)。因此,我们通常不会将两者直接比较。如果用户需要知道图片在Excel中显示时占用的单元格位置,那么显示尺寸(点)更有用;如果用户需要处理图片本身,则原始尺寸(像素)更有用。另外,引用[2]中提到了使用BufferedImage来处理图片,我们可以参考。因此,我们给出两种方法的代码示例。注意:使用ImageIO需要处理异常。下面给出完整的代码片段:</think>### 获取 XSSFPicture 图片的尺寸信息 在 Apache POI 中获取 `XSSFPicture` 图片宽度高度信息,需要结合图片原始数据显示尺寸计算。以下是两种常用方法: #### 方法一:获取原始图片尺寸(像素) ```java // 获取图片数据 XSSFPictureData pictureData = picture.getPictureData(); byte[] imageBytes = pictureData.getData(); // 通过 BufferedImage 读取原始尺寸 try (InputStream is = new ByteArrayInputStream(imageBytes)) { BufferedImage bufferedImage = ImageIO.read(is); int originalWidth = bufferedImage.getWidth(); // 原始宽度(像素) int originalHeight = bufferedImage.getHeight(); // 原始高度(像素) System.out.println("原始尺寸: " + originalWidth + "x" + originalHeight); } catch (IOException e) { e.printStackTrace(); } ``` #### 方法二:获取显示尺寸(点/磅) ```java // 获取显示尺寸(以点为单位的浮点值) Dimension displaySize = picture.getImageDimension(); double displayWidth = displaySize.getWidth(); // 显示宽度(点) double displayHeight = displaySize.getHeight(); // 显示高度(点) System.out.println("显示尺寸: " + displayWidth + "x" + displayHeight + " 点"); // 转换为像素(假设屏幕DPI=96) int pixelWidth = (int) (displayWidth * 96 / 72); int pixelHeight = (int) (displayHeight * 96 / 72); System.out.println("显示像素: " + pixelWidth + "x" + pixelHeight); ``` #### 关键说明: 1. **原始尺寸** - 通过 `BufferedImage` 获取的是图片文件本身的像素尺寸 - 不受 Excel 中缩放/拉伸的影响 2. **显示尺寸** - `getImageDimension()` 返回的是 Excel 中实际显示的尺寸 - 单位是**点(Point)**,1 点 = 1/72 英寸 - 转换像素需考虑屏幕 DPI(通常 96 DPI) 3. **尺寸差异** - 原始尺寸 ≠ 显示尺寸,因 Excel 会自动调整图片适应单元格 - 如需精确控制显示位置,需结合 `ClientAnchor` 的坐标信息[^1][^3] > ⚠️ 注意:若图片在插入时被裁剪或特殊处理(如引用[3]的裁剪场景),实际显示区域可能小于原始尺寸。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值