使用awt中的类操作图片缩放、变圆透明、水印、合并

原文链接:http://www.pelinli.com/#/article/31726509

本文是因为以前写过的一个公众号,需要做这些操作,现在总结一下。当时对awt只限于了解,用到的时候看了看文档和别人的代码,做了几次测试后写的一个整合工具。

本文会依据先后顺序介绍使用awt的工具类对图片进行缩放、变圆透明、合并、水印,虽然每个都是分步的,但是使用者可以看下api根据实际情况把缩放、变圆透明这些功能放在一个方法中。

图片缩放大小

使用者可以根据具体API和代码的例子自行实现(下述示例的代码并不规范,仅作为演示功能使用


public void testResizeImage() throws IOException {
        File imageFile = new File("E:\\test\\header.png");
        //缩放后的宽度和高度
        int width = 120, height = 120;

        BufferedImage imageBuffer = ImageIO.read(imageFile);
        BufferedImage tempBuffer = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);

        //使用tempBuffer创建一个temp画板
        Graphics graphics = tempBuffer.createGraphics();
        //把原文件画在这个画板上
        graphics.drawImage(imageBuffer, 0, 0, width, height, null);
        imageBuffer.flush();
        tempBuffer.flush();

        String filePath = "E:\\test\\header-120x120.png";
        File temp = new File(filePath);
        temp.createNewFile();
        //把画出来120*120图片的buffer写到temp文件
        ImageIO.write(tempBuffer, "png", temp);
    }

效果图如下所示:
使用awt中的类操作图片缩放、变圆透明、水印、合并_第1张图片

图片变圆透明

使用者可以根据具体API和代码的例子自行实现(下述示例的代码并不规范,仅作为演示功能使用


    /**
     * 图片变圆,四个角变透明
     * @throws IOException
     */
    public void testResizeCircle() throws IOException {
        File imageFile = new File("E:\\test\\header-120x120.png");
        BufferedImage imageBuffer = ImageIO.read(imageFile);
        int width = imageBuffer.getWidth(), height = imageBuffer.getHeight();

        BufferedImage tempBuffer = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
        Ellipse2D.Double shape = new Ellipse2D.Double(0, 0, width, height);

        Graphics2D g2 = tempBuffer.createGraphics();
        tempBuffer = g2.getDeviceConfiguration().createCompatibleImage(width, height, Transparency.TRANSLUCENT);
        g2 = tempBuffer.createGraphics();
        g2.setComposite(AlphaComposite.Clear);
        g2.fill(new Rectangle(width, height));
        g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC, 1.0f));
        g2.setClip(shape);
        g2.drawImage(imageBuffer, 0, 0, null);
        g2.dispose();


        ImageIO.write(tempBuffer, "png", imageFile);
    }

效果图如下所示:
使用awt中的类操作图片缩放、变圆透明、水印、合并_第2张图片

图片合并

使用者可以根据具体API和代码的例子自行实现(下述示例的代码并不规范,仅作为演示功能使用

    //合并两个图片(也可以合并多个)
    public void testMerge() throws IOException {
        File newFile = new File("E:\\test\\merge.jpg");
        File backgroundFile = new File("E:\\test\\background.jpg");
        File headerFile = new File("E:\\test\\header-120x120.png");
        BufferedImage backgroundImage = ImageIO.read(backgroundFile); //背景图片
        BufferedImage headerImage = ImageIO.read(headerFile); //头像图片
        int bWidth = backgroundImage.getWidth(), bHeight = backgroundImage.getHeight();
        int hWidth = headerImage.getWidth(), hHeight = headerImage.getHeight();

        BufferedImage combined = new BufferedImage(bWidth, bHeight, BufferedImage.TYPE_INT_RGB);
        Graphics g = combined.getGraphics();
        //先把背景图画到画板上
        g.drawImage(backgroundImage, 0, 0, null);

        //计算出头像放置的 Y 轴位置
        Double tempHeight1 = backgroundImage.getHeight() * 0.2;
        Long tempHeight2 = Math.round(tempHeight1);
        Integer headerImageY = Integer.valueOf(tempHeight2.toString());
        g.drawImage(headerImage, (bWidth - hWidth) / 2, headerImageY, null);

        newFile.createNewFile();
        ImageIO.write(combined, "jpg", newFile);
    }

效果图如下所示:
使用awt中的类操作图片缩放、变圆透明、水印、合并_第3张图片

图片水印

使用者可以根据具体API和代码的例子自行实现(下述示例的代码并不规范,仅作为演示功能使用

//图片加水印
    public void testWaterMark() throws IOException {
        File uploadFile = new File("E:\\test\\background.jpg");
        Font font = new Font(Font.MONOSPACED, Font.BOLD, 20);// 添加字体的属性设置

        BufferedImage uploadImage = ImageIO.read(uploadFile);
        int width = uploadImage.getWidth();
        int height = uploadImage.getHeight();

        BufferedImage combined = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        Graphics g = combined.getGraphics();
        g.drawImage(uploadImage, 0, 0, null);
        g.setFont(font);
        g.setColor(Color.RED);
        g.drawString("PBlog | www.pelinli.com", 10, 20);
        g.drawString("https://github.com/penglongli", 10, 40);

        ImageIO.write(combined, "png", uploadFile);
    }

效果图如下所示:
使用awt中的类操作图片缩放、变圆透明、水印、合并_第4张图片

原文链接:http://www.pelinli.com/#/article/31726509

你可能感兴趣的:(java基础巩固,Java,图片缩放,水印,合并图片)