前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java自动生成海报

java自动生成海报

作者头像
猿码优创
发布2020-07-15 09:40:53
2.6K0
发布2020-07-15 09:40:53
举报
文章被收录于专栏:猿码优创猿码优创

嘿~好久不见。

今天给大家分享的是java代码生成海报

先看看效果图:

file
file

是不是还挺漂亮的,背景来自我们公司ui。

看一下代码工程:

file
file
代码语言:javascript
复制
controller:

package cn.cnbuild.draw.controller;

import cn.cnbuild.draw.utils.draw.PosterUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class IndexController {

   @Autowired
   private PosterUtil posterUtil;


   @RequestMapping(value = "/")
   public String index() {

       String qrCodeUrl = "https://img.cnbuilder.cn/blog/6a63929cb1b4bd502e423bfbf25132e5.png"; //二维码
       String name = "kingyifan";
       String company = "猿码优创";

       posterUtil.drawImg(qrCodeUrl, name, company);
       return "欢迎来带猿码优创-生成海报系统";
   }
}

//draw工具类:
package cn.cnbuild.draw.utils.draw;

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.net.URL;
import javax.imageio.ImageIO;

import cn.cnbuild.draw.utils.FontUtil;
import org.springframework.stereotype.Component;

@Component
public class PosterUtil {

   /**
    * 生成海报
    *
    * @param qrCodeUrl
    * @param name
    * @param company
    * @return
    */
   public String drawImg(String qrCodeUrl, String name, String company) {
       try {
           Poster poster_ = new Poster();
           //海报的宽度
           poster_.setWidth(750);
           //海报的高度
           poster_.setHeight(1334);
           poster_.setQrCodeUrl(qrCodeUrl); //二维码
           poster_.setName(name);//名字
           poster_.setCompany(company);//公司
           Poster poster = PosterUtil.initPoster(poster_);
           String url = drawPoster(poster);
           return url;

       } catch (Exception e) {
           e.printStackTrace();
       }
       return "";
   }

   //背景的图片地址
   private static String bg_img = "D:\\hcr\\dev\\source\\other\\learn\\draw\\src\\main\\resources\\draw\\bg\\bg1.png";

   /**
    * 初始化海报信息
    *
    * @param poster_
    * @return
    */
   static Poster initPoster(Poster poster_) {

       Poster poster = new Poster();
       //画布宽高
       poster.setWidth(poster_.getWidth());
       poster.setHeight(poster_.getHeight());

       //名字
       poster.setName(poster_.getName());
       //字体可以更换成本地连接,这样不会造成字体丢失
       poster.setNameFont(FontUtil.getFont(FontUtil.SIMSUN1, 60));
       poster.setNameColor(new Color(255, 255, 255));//颜色字体
       poster.setNameX(46);//名字在海报的什么位置
       poster.setNameY(418);


       //公司 --注释同上
       poster.setCompany(poster_.getCompany());
       poster.setCompanyFont(FontUtil.getFont(FontUtil.SIMSUN, 26));
       poster.setCompanyColor(new Color(255, 255, 255));
       poster.setCompanyX(48);
       poster.setCompanyY(490);


       //二维码
       poster.setQrCodeUrl(poster_.getQrCodeUrl());
       poster.setQrCodeWidth(252);
       poster.setQrCodeHeight(252);
       poster.setQrCodeY(566);
       poster.setQrCodeX(260);


       return poster;
   }

   String drawPoster(Poster poster) throws Exception {
       System.out.println("开始生成二维码");
       //开始时间
       long startTime = System.currentTimeMillis();

       String qrCodeUrl = poster.getQrCodeUrl();
       BufferedImage qrCodeImage = ImageIO.read(new URL(qrCodeUrl));

       int width = poster.getWidth();
       int height = poster.getHeight();
       //画布
       BufferedImage canvas = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
       Graphics2D g = (Graphics2D) canvas.getGraphics();
       BufferedImage bg = null;
       bg = ImageIO.read(new File(bg_img));
       g.drawImage(bg.getScaledInstance(width, height, Image.SCALE_DEFAULT), 0, 0, null);

       // 设置文字抗锯齿
       g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);

       //画二维码
       g.drawImage(qrCodeImage.getScaledInstance(poster.getQrCodeWidth(), poster.getQrCodeHeight(), Image.SCALE_SMOOTH),
               poster.getQrCodeX(), poster.getQrCodeY(), null);

       //名字
       g.setColor(poster.getNameColor());
       g.setFont(poster.getNameFont());
       g.drawString(poster.getName(), poster.getNameX(), poster.getNameY());

       //公司
       g.setColor(poster.getCompanyColor());
       g.setFont(poster.getCompanyFont());
       g.drawString(poster.getCompany(), poster.getCompanyX(), poster.getCompanyY());

       g.dispose();

       //生成图片地址
       File resultImg = new File("D:\\hcr\\dev\\source\\other\\learn\\draw\\src\\main\\resources\\draw\\result\\" + poster.getName() + ".png");
       ImageIO.write(canvas, "png", resultImg);

       System.out.println("生成成功!");
       System.out.println("耗时: " + (System.currentTimeMillis() - startTime) / 1000.0 + "s");
       System.out.println("生成文件路径: " + resultImg.getAbsolutePath());

       //返回图片地址
       return resultImg.getAbsolutePath();
   }

}

海报实体类:
package cn.cnbuild.draw.utils.draw;

import java.awt.*;
import java.io.Serializable;

public class Poster implements Serializable {
   private int width;//海报的宽(像素为单位)
   private int height;//海报的高

   //名字
   private String name;
   private Font nameFont;
   private Color nameColor;
   private int nameX;
   private int nameY;

   //公司
   private String company;
   private Font companyFont;
   private Color companyColor;
   private int companyX;
   private int companyY;


   //二维码
   private String qrCodeUrl;
   private int qrCodeX;
   private int qrCodeY;
   private int qrCodeWidth;
   private int qrCodeHeight;

   public String getName() {
       return name;
   }

   public void setName(String name) {
       this.name = name;
   }

   public Font getNameFont() {
       return nameFont;
   }

   public void setNameFont(Font nameFont) {
       this.nameFont = nameFont;
   }

   public Color getNameColor() {
       return nameColor;
   }

   public void setNameColor(Color nameColor) {
       this.nameColor = nameColor;
   }

   public int getNameX() {
       return nameX;
   }

   public void setNameX(int nameX) {
       this.nameX = nameX;
   }

   public int getNameY() {
       return nameY;
   }

   public void setNameY(int nameY) {
       this.nameY = nameY;
   }

   public String getCompany() {
       return company;
   }

   public void setCompany(String company) {
       this.company = company;
   }

   public Font getCompanyFont() {
       return companyFont;
   }

   public void setCompanyFont(Font companyFont) {
       this.companyFont = companyFont;
   }

   public Color getCompanyColor() {
       return companyColor;
   }

   public void setCompanyColor(Color companyColor) {
       this.companyColor = companyColor;
   }

   public int getCompanyX() {
       return companyX;
   }

   public void setCompanyX(int companyX) {
       this.companyX = companyX;
   }

   public int getCompanyY() {
       return companyY;
   }

   public void setCompanyY(int companyY) {
       this.companyY = companyY;
   }

   public String getQrCodeUrl() {
       return qrCodeUrl;
   }

   public void setQrCodeUrl(String qrCodeUrl) {
       this.qrCodeUrl = qrCodeUrl;
   }

   public int getQrCodeX() {
       return qrCodeX;
   }

   public void setQrCodeX(int qrCodeX) {
       this.qrCodeX = qrCodeX;
   }

   public int getQrCodeY() {
       return qrCodeY;
   }

   public void setQrCodeY(int qrCodeY) {
       this.qrCodeY = qrCodeY;
   }

   public int getQrCodeWidth() {
       return qrCodeWidth;
   }

   public void setQrCodeWidth(int qrCodeWidth) {
       this.qrCodeWidth = qrCodeWidth;
   }

   public int getQrCodeHeight() {
       return qrCodeHeight;
   }

   public void setQrCodeHeight(int qrCodeHeight) {
       this.qrCodeHeight = qrCodeHeight;
   }

   public int getWidth() {
       return width;
   }

   public void setWidth(int width) {
       this.width = width;
   }

   public int getHeight() {
       return height;
   }

   public void setHeight(int height) {
       this.height = height;
   }


}


字体工具类:
package cn.cnbuild.draw.utils;

import java.awt.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;


public class FontUtil {


   public static final int SIMSUN = 5;
   public static final int SIMSUN1 = 6;


   /**
    * 根据字体类型获取字体
    *
    * @param type
    * @param size
    * @return
    */
   public static Font getFont(int type, float size) {
       // 字体路径 TODO
       String path = "";
       switch (type) {
           case SIMSUN:
               path = "D:\\hcr\\dev\\source\\other\\learn\\draw\\src\\main\\resources\\draw\\font\\aa.TTF";
               break;
           case SIMSUN1:
               path = "D:\\hcr\\dev\\source\\other\\learn\\draw\\src\\main\\resources\\draw\\font\\cc.OTF";
               break;
       }

       File file = new File(path);
       InputStream inputStream = null;
       try {
           inputStream = new FileInputStream(file);


           Font sPfBoldFont = Font.createFont(Font.TRUETYPE_FONT, inputStream);

           sPfBoldFont = sPfBoldFont.deriveFont(size);
           sPfBoldFont.deriveFont(Font.BOLD);
           return sPfBoldFont;
       } catch (FontFormatException e) {
           e.printStackTrace();
       } catch (IOException e) {
           e.printStackTrace();
       } finally {
           try {
               if (inputStream != null) {
                   inputStream.close();
               }
           } catch (Exception e) {
               e.printStackTrace();
           }
       }
       return null;
   }
}

启动文件:
package cn.cnbuild.draw;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DrawApplication {

   public static void main(String[] args) {
       SpringApplication.run(DrawApplication.class, args);
   }

}

application.yml文件

spring:
 profiles:
   active: dev #选择要用那个配置文件
	
application-dev.yml文件	

#端口号访问路径
server:
 port: 12007
 servlet:
   context-path: /

pom文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <parent>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-parent</artifactId>
       <version>2.3.1.RELEASE</version>
       <relativePath/> <!-- lookup parent from repository -->
   </parent>
   <groupId>cn.cnbuild</groupId>
   <artifactId>draw</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <name>draw</name>
   <description>Demo project for Spring Boot</description>

   <properties>
       <weixin-java-pay.version>3.5.0</weixin-java-pay.version>
       <java.version>1.8</java.version>
   </properties>

   <dependencies>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-web</artifactId>
       </dependency>

       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter</artifactId>
       </dependency>

       <dependency>
           <groupId>cn.hutool</groupId>
           <artifactId>hutool-all</artifactId>
           <version>4.1.21</version>
       </dependency>


       <!--添加fastjson依赖-->
       <dependency>
           <groupId>com.alibaba</groupId>
           <artifactId>fastjson</artifactId>
           <version>1.2.28</version>
       </dependency>


       <!-- jackson序列化 -->
       <dependency>
           <groupId>com.fasterxml.jackson.core</groupId>
           <artifactId>jackson-databind</artifactId>
       </dependency>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-web</artifactId>
       </dependency>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-web</artifactId>
       </dependency>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-web</artifactId>
       </dependency>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-web</artifactId>
       </dependency>


   </dependencies>
   <build>
       <plugins>
           <plugin>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-maven-plugin</artifactId>
           </plugin>
       </plugins>
   </build>

</project> 

启动文件:

file
file

终、、本文就是java生成海报,有什么问题可以联系我。


代码下载链接: https://pan.baidu.com/s/1k7naT2biSsZEm7tj2XTPcw 提取码: 8y42鼓励作者写出更好的技术文档,就请我喝一瓶哇哈哈哈哈哈哈哈。。你们的赞助决定我更新的速度哦!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-07-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档