首页 > 编程语言 >java切图片圆角

java切图片圆角

时间:2022-11-16 14:44:20浏览次数:36  
标签:圆角 java g2 image String import new 图片 bi1

import xyz.laremehpe.FileUtil.FileChooser;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.geom.Ellipse2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.Date;

public class roundImg {
    /**图片圆角处理,背景透明化
     * @param srcImageFile 原图片
     * @param result  处理后图片
     * @param type   图片格式
     * @param cornerRadius  720为圆角
     */
    public static void main(String[] args) {
        new roundImg(50);//圆角度数
    }

    public roundImg(int radius){
        String src = FileChooser(0);
        String affix = src.substring(src.length()-3);
        if("".equals(src))return;
        String replacement = "\\\\"+new Date().getTime()+"."+affix;
        String res = src.replaceAll("\\\\[a-zA-Z0-9\u4e00-\u9fa5]*\\."+affix,replacement);
        makeRoundedCorner(new File(src),new File(res),affix,radius);
    }
    public String FileChooser(int type) {// 1 -> directory 0 -> file
        JFileChooser jc = new JFileChooser();
        jc.setFileSelectionMode(type);
        jc.setDialogTitle("Select file");
        jc.setCurrentDirectory(FileSystemView.getFileSystemView().getHomeDirectory());// set default directory as
        jc.showOpenDialog(null);
        return jc.getSelectedFile().toString();
    }
public void makeRoundedCorner(File srcImageFile, File result, String type, int cornerRadius) {
        try {
            BufferedImage bi1 = ImageIO.read(srcImageFile);

            // 根据需要是否使用 BufferedImage.TYPE_INT_ARGB
            BufferedImage image = new BufferedImage(bi1.getWidth(), bi1.getHeight(),
                    BufferedImage.TYPE_INT_ARGB);

            Ellipse2D.Double shape = new Ellipse2D.Double(0, 0, bi1.getWidth(), bi1
                    .getHeight());

            Graphics2D g2 = image.createGraphics();
            image = g2.getDeviceConfiguration().createCompatibleImage(bi1.getWidth(), bi1.getHeight(), Transparency.TRANSLUCENT);
            g2 = image.createGraphics();
            g2.setComposite(AlphaComposite.Clear);
            g2.fill(new Rectangle(image.getWidth(), image.getHeight()));
            g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC, 1.0f));
            g2.setClip(shape);
            // 使用 setRenderingHint 设置抗锯齿
            g2 = image.createGraphics();
            g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            g2.fillRoundRect(0, 0,bi1.getWidth(), bi1.getHeight(), cornerRadius, cornerRadius);
            g2.setComposite(AlphaComposite.SrcIn);
            g2.drawImage(bi1, 0, 0, bi1.getWidth(), bi1.getHeight(), null);
            g2.dispose();
            ImageIO.write(image, type, result);
        } catch (Exception e) {
            // TODO: handle exception
        }
    }
}

 

标签:圆角,java,g2,image,String,import,new,图片,bi1
From: https://www.cnblogs.com/laremehpe/p/16895865.html

相关文章

  • Java NIO和IO的区别
    1.IO是面向流的,NIO是面向缓冲区的。2.JavaIO的各种流是阻塞的,这就意味着,当一个线程调用read()或write()时,该线程被阻塞,直到有一些数据被读取。JavaNIO的非阻塞模式,使一个......
  • P1422 小玉家的电费(Java)
    题目描述夏天到了,各家各户的用电量都增加了许多,相应的电费也交的更多了。小玉家今天收到了一份电费通知单。小玉看到上面写:据闽价电[2006]27号规定,月用电量在 150150......
  • Java引用类型参数传递
    结论:1)当使用基本数据类型作为方法的形参时,在方法体中对形参的修改不会影响到实参的数值2)当使用引用数据类型作为方法的形参时,若在方法体中修改形参指向的数据内容,则会对实......
  • 如何通过Java 在 Word 中更改字体颜色
    在Word文档中使用不同的字体颜色既可以丰富文档外观,也能突出强调某些重点部分。当Word文档包含大量内容时,可以使用FreeSpire.DocforJava轻松更改Word文档中的字体颜色。......
  • Java中的内部类与匿名内部类详解
    ......
  • 【tensorflow2.6】图片数据建模流程:猫狗分类,83.6%识别率
    目标:识别猫和狗一、猫狗数据集数据集下载:公众号,回复:猫狗数据集训练数据集(每一张图片都有dog和cat标签):测试集(图片没有标签):二、训练环境kaggletenslrflow2.6三、数据处理impo......
  • 「Java数据结构」手撕数组队列及环形数组队列。
    目录​​一、队列​​​​1、基本介绍​​​​2、示意图​​​​3、队列的特点​​​​二、数组模拟队列​​​​1、数组队列初始化​​​​2、判断方法​​​​3、增删改查......
  • java-贪吃蛇小游戏
    javaGUI编程实现贪吃蛇小游戏一准备首先准备三张图片,分别是:蛇头,蛇身体,食物。(尺寸25*25像素)我创建的是一个springboot项目,所以我把这些静态资源放在了resources目......
  • Java实现5种负载均衡算法
    Java实现5种负载均衡算法1.轮询算法importcom.google.common.collect.Lists;importjava.util.List;importjava.util.concurrent.atomic.AtomicInteger;/***......
  • uni-app img header 请求图片
    由于uni-app没有Blob对象。只能用内置的uni.download下载图片了。wx.downloadFile({url:`http://192.168.1.1:8999/view/1MsDmdpGRI27FaRDKNmgQ/wx`,he......