首页 > 其他分享 >画图

画图

时间:2024-08-22 16:09:10浏览次数:8  
标签:int 画图 padding Color g2d graphics size


    public static void main(String[] args) {
//        String[] text = {"测试设备编号;路灯;花源成美路辅路;江苏测试管理有限公司;028-60822000;105.872615383,10.466578703"};
//
//        String imgpath = "D:\\IdeaProjects\\Ticket-Manage-Service\\ticket-manage-service\\QrCode";
//
//        for (int i = 0; i < text.length; i++) {
//
//            String[] s = text[i].split(";");
//
//            String[] lines = {"设备编号:" + s[0], "设备类型:" + s[1], "道路名称:" + s[2], "管护单位:" + s[3], "报修电话:" + s[4]};
//            String[] line = {s[0], s[1], s[2], s[3], s[4]};
//
//            createq(lines, line, imgpath + s[0] + ".jpeg");
//        }

        File path = new File(System.getProperty("user.dir"));
//2024-09-19-8排-2号桌-6号位.png
        File qrCodeFile = new File(path.getAbsolutePath(), "QrCode");
        String filePath = qrCodeFile.getAbsolutePath().concat("/")
                .concat("test")
                .concat(".png");
        QrCodeUtil.generateQrCodeWithText("123456", filePath, "2024-09-19", "8排-2号桌-6号位");
    }

    static void createq(String[] lines, String[] line, String imgpath) {

        String qrCodeText = line[0];

        //二维码大小
        int size = 400;

        //画布大小
        int combinedWidth = size + 800;
        int combinedHeight = size + 400;

        //标题高度
        int topsize = 160;

        //设置标题y坐标
        int yTitle = 110;

        //设置画布内边距
        int padding = 5;

        //设置标题内容
        String title = "xx市镇";

        //设置图片dpi
        int dpi = 300;

        Color blue = new Color(75, 125, 178);

        //设置二维码参数
        Map hints = new HashMap();

        //设置UTF-8, 防止中文乱码
        hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");

        // 设置二维码的容错性
        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);

        //留白 默认4
        hints.put(EncodeHintType.MARGIN, 1);

        // 码版本,取值为 1 到 40 ,根据二维码内容决定最低版本
        hints.put(EncodeHintType.QR_VERSION, 3);

        //创建码位图
        BitMatrix bitMatrix = null;
        try {
            bitMatrix = new QRCodeWriter().encode(qrCodeText, BarcodeFormat.QR_CODE, size, size, hints);
        } catch (WriterException e) {
            e.printStackTrace();
        }

        //将生成码位图转换成BufferedImage
        BufferedImage qrImage = MatrixToImageWriter.toBufferedImage(bitMatrix);

        //创建空白BufferedImage
        BufferedImage combined = new BufferedImage(combinedWidth, combinedHeight, BufferedImage.TYPE_INT_RGB);

        //从BufferedImage对象中获取画布(Graphics2D)对象
        Graphics2D graphics = combined.createGraphics();

        //设置渲染提示为启用文本抗锯齿
        graphics.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);

        //默认开启绘图抗锯齿
        //graphics.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL,RenderingHints.VALUE_STROKE_DEFAULT);

        //设置空白画布整体背景颜色
        GraphicsUtils.drawBackground(graphics, 0, 0, combinedWidth, combinedHeight, Color.WHITE);

        //绘制表格画线
        //绘制线在内边距内,不影响其它内容,-1操作
        int linepadding = padding - 1;
        //绘制矩形
        GraphicsUtils.drawRectangle(graphics, linepadding, linepadding, combinedWidth - linepadding * 2, combinedHeight - linepadding * 2, Color.BLACK);
        //绘制内三横线
        GraphicsUtils.drawLine(graphics, linepadding, padding + topsize + 1, combinedWidth - linepadding, padding + topsize + 1, Color.BLACK);
        GraphicsUtils.drawLine(graphics, linepadding, padding + topsize + size + 2, combinedWidth - linepadding, padding + topsize + size + 2, Color.BLACK);
        GraphicsUtils.drawLine(graphics, linepadding, combinedHeight - (combinedHeight - padding * 2 - topsize - size + 2) / 2 - padding, combinedWidth - linepadding, combinedHeight - (combinedHeight - padding * 2 - topsize - size + 2) / 2 - padding, Color.BLACK);
        //绘制二维码竖线及右边2横线
        GraphicsUtils.drawLine(graphics, padding + size + 1, padding + topsize + 1, padding + size + 1, padding + topsize + size + 1, Color.BLACK);
        GraphicsUtils.drawLine(graphics, padding + size + 1, padding + topsize + 1 + size / 3, combinedWidth - linepadding, padding + topsize + 1 + size / 3, Color.BLACK);
        GraphicsUtils.drawLine(graphics, padding + size + 1, padding + topsize + 1 + size / 3 * 2, combinedWidth - linepadding, padding + topsize + 1 + size / 3 * 2, Color.BLACK);

        //该方法用于绘制头部绘制矩形并填充指定颜色
        GraphicsUtils.drawFillRect(graphics, padding, padding, combinedWidth - (padding * 2), topsize, blue);

        //二维码插入画布
        GraphicsUtils.drawImage(graphics, qrImage, padding, topsize + padding + 2);

        //该方法用于绘制头部绘制矩形并填充指定颜色
        GraphicsUtils.drawBackground(graphics, padding, padding, combinedWidth - (padding * 2), topsize, blue);

        //绘制头部字体
        Font titleFont = new Font("宋体", Font.BOLD, 70);
        GraphicsUtils.drawFont(graphics, titleFont, Color.white);
        FontMetrics fontMetrics = graphics.getFontMetrics();
        int fontWidth = fontMetrics.stringWidth(title);
        int xTitle = ((combinedWidth - fontWidth) / 2);
        GraphicsUtils.drawText(graphics, title, xTitle, yTitle + padding, titleFont, Color.white);

        //绘制非头部字体

        //设置字体及颜色
        Font downFont = new Font("宋体", Font.BOLD, 50);
        GraphicsUtils.drawFont(graphics, downFont, Color.BLACK);

        fontMetrics = graphics.getFontMetrics();

        int fontHeight = fontMetrics.getHeight();

        for (int i = 0; i < lines.length; i++) {

            if (i < 3) {
                graphics.drawString(lines[i], size + padding + 5, topsize + padding + (size / 3) * i + (size / 3 + fontHeight) / 2);
            } else if (i == 3) {
                int test = combinedHeight - (combinedHeight - padding * 2 - topsize - size) / 4 * 3 - padding + fontHeight / 2;
                graphics.drawString(lines[i], 5 + padding, test);
            } else if (i == 4) {
                int test = combinedHeight - (combinedHeight - padding * 2 - topsize - size) / 4 - padding + fontHeight / 2;
                graphics.drawString(lines[i], 5 + padding, test);
            }
        }

        graphics.dispose();

        try {
            ImageIO.write(combined, "jpeg", new File(imgpath));
        } catch (IOException e) {
            e.printStackTrace();
        }

    }


}

class GraphicsUtils {

    // 创建一个空白的 BufferedImage 对象
    public static BufferedImage createEmptyImage(int width, int height) {
        return new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
    }

    // 在图像上设置背景颜色
    public static void drawBackground(Graphics2D g2d, int x, int y, int width, int height, Color color) {
        g2d.setBackground(color);
        g2d.clearRect(x, y, width, height);
    }


    // 在图像上绘制文本
    public static void drawText(Graphics2D g2d, String text, int x, int y, Font font, Color color) {
        g2d.setColor(color);
        g2d.setFont(font);
        g2d.drawString(text, x, y);
    }

    // 在图像上绘制矩形
    public static void drawRectangle(Graphics2D g2d, int x, int y, int width, int height, Color color) {
        g2d.setColor(color);
        g2d.drawRect(x, y, width, height);
    }

    // 在图像上绘制椭圆
    public static void drawEllipse(Graphics2D g2d, int x, int y, int width, int height, Color color) {
        g2d.setColor(color);
        g2d.drawOval(x, y, width, height);
    }

    // 在图像上绘制线段
    public static void drawLine(Graphics2D g2d, int x1, int y1, int x2, int y2, Color color) {
        g2d.setColor(color);
        g2d.drawLine(x1, y1, x2, y2);
    }

    // 在图像上绘制图片
    public static void drawImage(Graphics2D g2d, BufferedImage imageToDraw, int x, int y) {
        g2d.drawImage(imageToDraw, x, y, null);
    }

    // 在图像指定区域绘制颜色
    public static void drawFillRect(Graphics2D g2d, int x, int y, int width, int height, Color color) {
        g2d.setColor(color);
        g2d.fillRect(x, y, width, height);
    }

    // 在图像指定区域绘制颜色
    public static void drawFont(Graphics2D g2d, Font font, Color color) {
        g2d.setFont(font);
        g2d.setColor(color);
    }
}

标签:int,画图,padding,Color,g2d,graphics,size
From: https://www.cnblogs.com/Arborblog/p/18374061

相关文章

  • Window自带的“画图”软件查看图片某点的RGB值
    第一步:用“截图工具”截取图片并保存到本地,假设命名为“捕获.JPG”第二步:用“画图”工具打开图像 第三步:点击颜色选取器 第四步:在图上选择颜色,左键点击选中 此时右上方已经显示了捕获的颜色 第五步:点击右上方的“编辑颜色”  就能看到对应的颜色的RGB数值了......
  • 【python海龟画图】代码整理
    春联点击查看代码importturtlet=turtlet.showturtle()t.penup()t.goto(-150,150)t.pendown()t.color('black','red')t.begin_fill()foriinrange(2):t.forward(50)t.right(90)t.forward(400)t.right(90)t.end_fill()t......
  • AI 画图有什么用?
    最近一直在“玩”AI画图,因为发现其实这里面有很多可以变现的方式。特别是现在信息量超大的时代,由于图片的直观化,大家对图片信息的接受度越来愈高。简单说就是看图更省事有了AI,我们这种不太会画画的人也有了个大大的利器。只需要通过AI技术,就可以将文字描述转化为精......
  • 使用Markdown画图
    60.使用Markdown画图大部分Markdown编辑器的画图功能都是基于mermaid的,因此我们先介绍下它。‍什么是mermaid​‍mermaid是一个开源的项目,旨在通过纯文本的形式来画图,支持流程图,时序图,甘特图,类图,状态图和饼图等。官网:mermaid.js.org开源在GitHub:github.com/mermaid......
  • 【科研绘图】【多因子分组箱线图】:附Origin详细画图流程
    目录1、理解箱线图2、画图流程1、理解箱线图(1)什么是箱线图箱线图,又称箱形图、盒须图或盒式图,用于体现数据分散情况的统计图。在视觉上辅助读者直观地看到每个数据中心位置、散布范围以及异常值等信息。(2)箱线图的组成箱体:下图方框形状的位置即为箱体,箱体下侧边界......
  • 【科研绘图】【XY误差棒图】:附Origin详细画图流程
    1、什么是XY误差棒图XY误差棒图,是一种体现实验数据误差以及不确定性的统计图,在视觉上辅助读者直观地看到每个数据点的误差范围。在本例图中,通过X误差和Y误差两组指标绘制XY误差棒图,它由折线和XY误差棒组成,Y值决定了折线趋势,XY误差值的大小分别决定了误差棒的长短和高低。2、......
  • 使用滤镜实现文字根据动画图片的效果
    上周写了一篇文字智能适配背景的文章,其中涉及到了色彩与滤镜方面的知识,也提到了直接在 CSS 上使用滤镜。今天,我们趁热打铁,使用 CSS 的滤镜写相对来说比较炸裂的文字根据动画图片的特效吧!一、动画与文字直接在 body 中放入一个 div 元素,然后用我男朋友高中时候原创......
  • 前端画图引擎ZRender,echarts的渲染器,你知道吗?
    Zrender是一个轻量级的Canvas和SVG渲染库,它提供了一个高性能的图形绘制和交互的解决方案,用于在Web页面上创建丰富的数据可视化和交互式图形。可能大部分小伙伴不知道这个类库,本文给大家科普一下。一、Zrender是谁?该项目由EFE团队开发而来,项目托管在GitHub上。Zrender基于HT......
  • 用GPT-4画图捣鼓奇奇怪怪的猫猫
    先来一只惊讶的猫猫让他变得笨蛋一点再来一只,好吓人改一改加个天线操作个飞船吧为了猫星而战斗!哈哈哈哈哈哈捣鼓够了,也想试试捣鼓猫猫的可以看笔者的这篇文章GPT4可以买一天了?原文链接:用GPT-4画图捣鼓奇奇怪怪的猫猫......
  • python 基础习题5 --- 海龟画图系列
    1.  画出一个半径为100的圆,背景色和画笔颜色自己定义,如下图:importturtleastt.speed(10)t.bgcolor("black")t.pencolor("red")t.pensize(2)radius=100t.penup()t.goto(0,-100)t.down()t.circle(radius)t.penup()t.done()答案 2. 用循环画出五个同......