java将图片压缩到指定大小以内并保存图片(图片缩略)

1:本地文件的压缩

    public static void main(String[] args) {
        //String path="C:\\Users\\dell\\Desktop\\文章\\6.png";
        String path = "C:\\Users\\dell\\Desktop\\微信图片_20230201212653.png";
        try {

            //图片所在路径

            BufferedImage templateImage = ImageIO.read(new File(path));

            //原始图片的长度和宽度

            int height = templateImage.getHeight();

            int width = templateImage.getWidth();

            //通过比例压缩

            float scale = 0.5f;

            //通过固定长度压缩

            int doWithHeight = 200;

            int dowithWidth = 200;

            //压缩之后的长度和宽度

            // int doWithHeight = (int) (scale * height);

            //int dowithWidth = (int) (scale * width);

            BufferedImage finalImage = new BufferedImage(dowithWidth, doWithHeight, BufferedImage.TYPE_INT_RGB);

            finalImage.getGraphics().drawImage(templateImage.getScaledInstance(dowithWidth, doWithHeight, java.awt.Image.SCALE_SMOOTH), 0, 0, null);

            //图片输出路径,以及图片名

            FileOutputStream fileOutputStream = new FileOutputStream("C:\\Users\\dell\\Desktop\\文章\\6-200.png");

            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fileOutputStream);

            encoder.encode(finalImage);

            fileOutputStream.close();

        } catch (IOException e) {

            e.printStackTrace();

        }


    }

2:url文件的压缩

    @SneakyThrows
    public static void main(String[] args) {
        //String path="C:\\Users\\dell\\Desktop\\文章\\6.png";
//        String path = "C:\\Users\\dell\\Desktop\\微信图片_20230201212653.png";
        String path = "http://192.168.11.50:8081/jeecg-boot/sys/sysMeetingManage/download/8b2a7891-6606-470a-b6b8-fbdf0296e214.png";
        URL url = new URL(path);

        String replaceName = new File(path).getName().replace(".", "-200x200.");

        //图片所在路径

        BufferedImage templateImage = ImageIO.read(url);

        //原始图片的长度和宽度

        int height = templateImage.getHeight();

        int width = templateImage.getWidth();

        //通过比例压缩

        float scale = 0.5f;

        //通过固定长度压缩

        int doWithHeight = 200;

        int dowithWidth = 200;

        //压缩之后的长度和宽度

        // int doWithHeight = (int) (scale * height);

        //int dowithWidth = (int) (scale * width);

        BufferedImage finalImage = new BufferedImage(dowithWidth, doWithHeight, BufferedImage.TYPE_INT_RGB);

        finalImage.getGraphics().drawImage(templateImage.getScaledInstance(dowithWidth, doWithHeight, java.awt.Image.SCALE_SMOOTH), 0, 0, null);

        //图片输出路径,以及图片名


        FileOutputStream fileOutputStream = new FileOutputStream("D:\\opt\\upFiles\\8b2a7891-6606-470a-b6b8-fbdf0296e214-200x200.png");

        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fileOutputStream);

        encoder.encode(finalImage);

        fileOutputStream.close();

    }

3:图片缩略到指定大小

    @SneakyThrows
    public static void main(String[] args) {
        //String path="C:\\Users\\dell\\Desktop\\文章\\6.png";
//        String path = "C:\\Users\\dell\\Desktop\\微信图片_20230201212653.png";
        String path = "http://192.168.11.50:8081/jeecg-boot/sys/sysMeetingManage/download/68ac9b4d-ef21-414c-8b31-18998aadf4c7.png";
        String substring = path.substring(path.lastIndexOf("/")+1);
        File file = new File("D://opt//upFiles//" + substring);
        boolean exists = file.exists();
        if (exists){
            Thumbnails.of(file).size(200,200).toFile("D://opt//upFiles//"+ getFileNameNoEx(substring)+"_200_200"+ getFileNameEx(substring));
        }else {
            System.out.println("文件不存在");
        }


    }

    public void saveFileFromInputStream(InputStream is, String path, String filename, int fileSize) throws IOException {
        String fullPathName = "";
        if (isWindows()) {
            fullPathName = path + "\\" + filename;
        } else {
            fullPathName = path + "/" + filename;
        }
        FileOutputStream fs = new FileOutputStream(fullPathName);
        byte[] buffer = null;
        if (fileSize > (1024 * 1024)) {
            buffer = new byte[1024 * 1024];// 按1M写入
        } else {
            buffer = new byte[fileSize];// 按1M写入
        }
        int byteread = 0;
        while ((byteread = is.read(buffer)) != -1) {
            fs.write(buffer, 0, byteread);
            fs.flush();
        }
        fs.close();
        is.close();

        //写入缩略图
        if( filename.toUpperCase().endsWith(".PNG") || filename.toUpperCase().contains(".JPEG") || filename.toUpperCase().contains(".JPG") )
        {
            String thumFilePath = "";
            if (isWindows()) {
                thumFilePath = path + "\\" + getFileNameNoEx(filename)+"_200_200"+ getFileNameEx(filename);
            } else {
                thumFilePath = path + "/" + getFileNameNoEx(filename)+"_200_200"+ getFileNameEx(filename);;
            }

            Thumbnails.of(fullPathName).size(200,200).toFile(thumFilePath);
        }

    }

    public static boolean isLinux() {
        return System.getProperty("os.name").toLowerCase().indexOf("linux") >= 0;
    }

    public static boolean isWindows() {
        return System.getProperty("os.name").toLowerCase().indexOf("windows") >= 0;
    }

    public static String getFileNameNoEx(String filename) {
        if ((filename != null) && (filename.length() > 0)) {
            int dot = filename.lastIndexOf('.');
            if ((dot >-1) && (dot < (filename.length()))) {
                return filename.substring(0, dot);
            }
        }
        return filename;
    }

    public static String getFileNameEx(String filename) {
        if ((filename != null) && (filename.length() > 0)) {
            int dot = filename.lastIndexOf('.');
            if ((dot >-1) && (dot < (filename.length()))) {
                return filename.substring(dot, filename.length());
            }
        }
        return filename;
    }

注意:踩过的坑,文件名不可以带好,带会报java.io.FileNotFoundException

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值