美文网首页
Java获取图片的大小、宽度、高度 & ImageIo.read

Java获取图片的大小、宽度、高度 & ImageIo.read

作者: wyn_做自己 | 来源:发表于2023-03-09 11:07 被阅读0次

    今日份鸡汤:我深知自己不够优秀,当遇到像太阳一样的人,我追赶不上,但是可以学着他们奔跑的样子,也往前走上几步,哪怕最后失去踪影,起码也曾被阳光沐浴过,往后,就照着光的样子生活~

    需求场景:
    前几天做了一个上传图片的接口,今天说让加一下尺寸和大小的限制,废话不多说,直接上代码吧:
    我们前端是通过MultipartFile对象(该对象里面是图片)进行文件上传的。

    public class Test {
        public static void main(String[] args) throws Exception {
            // 文件对象
            MultipartFile file = 假设此处是前端传过来的对象;
            // 文件大小;其中file.length()获取的是字节,除以1024可以得到以kb为单位的文件大小
            long size = file.getSize() / 1024;
            // 图片对象
            BufferedImage bufferedImage = ImageIO.read(file.getInputStream());
            // 宽度
            int width = bufferedImage.getWidth();
            // 高度
            int height = bufferedImage.getHeight();
            // 打印信息
            System.out.printf("图片大小:%skb;图片宽度:%s像素;图片高度:%s像素", size, width, height);
        }
    }
    

    执行结果:

    图片大小:4424kb;图片宽度:7360像素;图片高度:4912像素
    

    如果使用File对象(该对象里面是图片),代码如下:

    public class Test {
        public static void main(String[] args) throws Exception {
            // 文件对象
            File file = new File("C:\\test\\20220619\\city.jpg");
            // 文件大小;其中file.length()获取的是字节,除以1024可以得到以kb为单位的文件大小
            long size = file.length() / 1024;
            // 图片对象
            BufferedImage bufferedImage = ImageIO.read(new FileInputStream(file));
            // 宽度
            int width = bufferedImage.getWidth();
            // 高度
            int height = bufferedImage.getHeight();
            // 打印信息
            System.out.printf("图片大小:%skb;图片宽度:%s像素;图片高度:%s像素", size, width, height);
        }
    }
    

    执行结果:

    图片大小:4424kb;图片宽度:7360像素;图片高度:4912像素
    

    这块附上一个,postman测试文件上传的方法:https://www.jianshu.com/p/fe60e766d54a

    虽然功能实现了,但是也不免遇到坑,我在本地测试的时候完全没有问题,但是部署到测试环境,其他同事就来反馈,图片不能上传,额。。。。

    然后我就想着要不换个图片,果然换个图片空指针就出来了。debug发现bufferedImage = null。


    image.png

    简单描述就是有的图片格式正确,有的图片格式为WEBP,WEBP格式的就会出现null情况。

    这块再简单说明一下ImageIO用法:
    它可读取的图片类型是有限制的,可以读取图片的格式为:[BMP, bmp, jpg, JPG, wbmp, jpeg, png, PNG, JPEG, WBMP, GIF, gif]
    但是你可能要说你的图片文件后缀是png格式,按道理说应该支持啊,后来将文件下载下来放到notepad++上查看才发现前缀是:RIFF?� WEBPVP8 这说明该文件的实际格式是webp格式。文件后缀名有时候不是实际的文件格式。

    这段代码输出支持的图片处理格式

            String readFormats[] = ImageIO.getReaderFormatNames();
            String writeFormats[] = ImageIO.getWriterFormatNames();
            System.out.println("Readers: " + Arrays.asList(readFormats));
            System.out.println("Writers: " + Arrays.asList(writeFormats));
    

    Readers: [JPG, jpg, tiff, pcx, PCX, bmp, BMP, gif, GIF, WBMP, png, PNG, raw, RAW, JPEG, pnm, PNM, tif, TIF, TIFF, wbmp, jpeg]
    Writers: [JPG, jpg, tiff, bmp, BMP, pcx, PCX, gif, GIF, WBMP, png, PNG, raw, RAW, JPEG, pnm, PNM, tif, TIF, TIFF, wbmp, jpeg]

    详细可以看一下这篇:https://blog.csdn.net/qq_36407919/article/details/122872684

    相关文章

      网友评论

          本文标题:Java获取图片的大小、宽度、高度 & ImageIo.read

          本文链接:https://www.haomeiwen.com/subject/gsyaldtx.html