0
点赞
收藏
分享

微信扫一扫

Graphics2D的使用详情

Python百事通 2021-09-24 阅读 53
Java
Graphics2D类扩展于 Graphics 类,Graphics2D是在Java平台上渲染二维形状,文本和图像的基本类。无需jar包这个是jdk自带的;
   public void Graphics2DDetails() throws IOException {

        // 设置宽3400高661大小的底板画布
        BufferedImage canvas = new BufferedImage(400, 661, BufferedImage.TYPE_4BYTE_ABGR);

        //创建Graphics2D 
        Graphics2D g = (Graphics2D) canvas.getGraphics();
        
        //设置纯色背景色
        g.setBackground(Color.gray);
        //通过设置的颜色来绘制背景色
        g.clearRect(0, 0, 400, 661);

        //画背景
        //读取图片
        BufferedImage backgroundImg = ImageIO.read(new URL(LOGOs));
        //将图片铺满整个底板画布上(X,Y设置从0,0这个定点开始画背景)
       g.drawImage(backgroundImg.getScaledInstance(400, 661, Image.SCALE_DEFAULT), 0, 0, null);

        //画图片
        //读取图片
        BufferedImage bufferedImageLogo = ImageIO.read(new URL(LOGO));
        //写入图片设置图片的大小(宽,高),以及X,Y的定点位置
        g.drawImage(bufferedImageLogo.getScaledInstance(80, 50, Image.SCALE_DEFAULT), 10, 10, null);

         //设置文字
        //设置文字颜色
        g.setColor(Color.WHITE);
        //设置文字的字体,字体样式 (加粗,斜体等)和字体大小
        //文字字体没有时需把字体下载好后放入jre中
        //首先进入到服务器使用的jre目录
        // cd /usr/lib/jdk/jre/lib/fonts
        //如果进去之后没有fonts文件夹,就自己创建一个
        //进入之后,将 simhei.ttf 文件copy到该目录下即可,可以通过cp也可以用secureFx或者winscp直接上传,改的是jvm的字体 所以不需要重启服务器。
        g.setFont(new Font("宋体", Font.BOLD, 13));
        //要写入的文字内容,X轴坐标,Y轴坐标(X,Y合起来是一个定点,在这个定点开始写入内容)
        g.drawString("张三", 100, 450);
    
        //设置文字 竖向文字就是改变每个字的X,Y的定点位置
        Integer num = TEXT.length() % 7 == 0 ? TEXT.length() / 7 : TEXT.length() / 7 + 1;
        Integer width = 350;
        Integer height = 110;
        for (int j = 1; j <= num; j++) {
            height = 110;
            String str = "";
            if (j == num) {
                str = TEXT.substring((j - 1) * 7, TEXT.length());
            } else {
                str = TEXT.substring((j - 1) * 7, j * 7);
            }

            for (int i = 0; i < str.length(); i++) {
                g.setColor(Color.WHITE);
                g.setFont(new Font("宋体", Font.BOLD, 20));
                String val = String.valueOf(str.charAt(i));
                g.drawString(val, width, height);
                height += 20;
            }
            width -= 20;
        }

        //矩形
        //X轴20,Y轴30,宽是80,高是40
        Rectangle2D rect = new Rectangle2D.Double(20,30,80,40);
        
        //圆角矩形
        //左上角是(20,30),宽是130,高是100,圆角的弧度18,15数字越大越圆,当为0时跟矩形一样。
        RoundRectangle2D rectRound = new RoundRectangle2D.Double(20,30,130,100,18,15);

        //创建一个椭圆行的几何模板
        //X轴20,Y轴30,宽是100,高是50(如果宽高一样就是圆行,宽高不一样就是椭圆)
        Ellipse2D ellipse = new Ellipse2D.Double(20,30,100,50);
        //按照椭圆剪切
        g.setClip(ellipse);
        //读取托图片
        BufferedImage logo = ImageIO.read(new URL(LOGO));
        //设置图片(切记这里的图片一定要跟椭圆行一样大,小标定位一样否则展示的不是椭圆)
        g.drawImage(logo.getScaledInstance(100, 50, Image.SCALE_DEFAULT), 20, 30, null);

        //作用是销毁程序中指定的图形界面资源,如果在使用了graphics获得windows一些图形资源,而不进行关闭的话,就会造成内存溢出的情况的,导致程序卡死.类似close方法
        g.dispose();
        
        //保存的方式
        //保存到本地
        File file = new File("d://9.png");
        //使用ImageIo时会抛异常
        //保存的类型,保存的地址
        ImageIO.write(canvas, "png", file);
        
        //字节数组输出流
        ByteArrayOutputStream os = new ByteArrayOutputStream();
        //使用ImageIo时会抛异常
        //保存的类型,保存到字节流中(此时可以直接返回字节,使用阿里云上上传图片)
        ImageIO.write(canvas, "png", os);

        //把字节转换为流(使用流上传图片)
        InputStream inputStream = new ByteArrayInputStream(os.toByteArray());
    }
举报

相关推荐

Graphics2D画图

0 条评论