㑈手机版
  • 首页
  • 维修信息
  • 英语学习
  • 人物介绍
  • 旅游攻略
  • 汽车知识
  • 电脑数码
  • 生活常识
首页 生活常识

海报制作教程(制作属于自己的海报或名片)

时间:2024-07-15 16:15:14  编辑:StruggleLittleAnt


简介:

生活和工作中大家是否遇到过需要生成一张完全属于自己的名片或者生成一个自定义的海报?上面展示自己的头像、有自己的简介、自己的二维码及公司的logo等,今天就跟大家分享一下如何通过Java实现自定义生成海报。

准备:

1、准备一张背景图

2、准备头像图片

实现:

Java后端实现画布绘制图像需要使用到java.awt包下面的BufferedImage

1、首先先创建一个背景图片输入流

FileInputStream fis = new FileInputStream(new File(""E:\\poster\\back.png""));

2、创建背景图片对象

Image srcImg = ImageIO.read(fis);

3、根据背景图片的宽高创建画布

BufferedImage bufferedImage = new BufferedImage(

//宽度

srcImg.getWidth(null),

//高度

srcImg.getHeight(null),

//图片类型

BufferedImage.TYPE_INT_RGB);

4、创建2D画笔对象

Graphics2D g = bufferedImage.createGraphics();

5、设置画布背景

g.drawImage(srcImg.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0,null);

6、开始绘制

//绘制头像

g.drawImage(transferImgForRoundImgage(avatarDir), 278, 76, 196, 196, null);

//绘制字符串(简介、描述等)

Graphics2DUtils.drawString(g, Color.decode("#000000"), new Font("微软雅黑", Font.BOLD, 48), nickName, 0, 338, width, 12, 5, true);

//绘制二维码

g.drawImage(ImageIO.read(qrCodeImg), 202, 654, 348, 348, null);

7、处理画作

g.dispose();

8、得到输出流

ByteArrayOutputStream os = new ByteArrayOutputStream();

ImageIO.write(bufferedImage, "jpg", os);

项目中有用到生成二维码的功能,使用的是谷歌推出的二维码解析和生成的开源库,项目地址为https://github.com/zxing/zxing,具体使用方法将在下片文章中给大家分享。

具体代码:

public String createPoster(String nickName,String idNum,String description,String avatarDir,String qrcodeDir) throws Exception {
    String resourcePath = PosterUtils.class.getResource("/image/").getPath();
    long nowTime = System.currentTimeMillis();

    File qrCodeImg = new File(qrcodeDir);
    File fileBg = new File("F:\\poster\\back.png");
    //1、背景图片输入流
    FileInputStream fis = new FileInputStream(fileBg);
    //2、背景图片对象
    Image srcImg = ImageIO.read(fis);
    //3、创建画布,根据背景图片的宽高
    BufferedImage bufferedImage = new BufferedImage(
            //宽度
            srcImg.getWidth(null),
            //高度
            srcImg.getHeight(null),
            //图片类型
            BufferedImage.TYPE_INT_RGB);
    int width = bufferedImage.getWidth();
    int height = bufferedImage.getHeight();
    System.out.println("width:"+width);
    System.out.println("height:"+height);
    //4、得到2d画笔对象
    Graphics2D g = bufferedImage.createGraphics();
    // 设置对线段的锯齿状边缘处理
    g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    //5、设置画布背景
    g.drawImage(srcImg.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0,null);
    //6、```````````开始作画```````````
    /*Font rewardFirstFont = new Font("PingFang SC Bold", Font.PLAIN, 24);
    Font rewardLastFont = new Font("PingFang SC Bold", Font.PLAIN, 48);*/
    //头像图片
    if(StringUtils.isNotBlank(avatarDir)){
        //URL avatarUrl = new URL(avatarDir);
        g.drawImage(transferImgForRoundImgage(avatarDir), 278, 76, 196, 196, null);
    }
    //昵称
    Graphics2DUtils.drawString(g, Color.decode("#000000"), new Font("微软雅黑", Font.BOLD, 48), nickName, 0, 338, width, 12, 5, true);
    //ID号
    Graphics2DUtils.drawString(g, Color.decode("#999999"), new Font("微软雅黑", Font.PLAIN, 32), idNum, 0, 408, width, 12, 5, true);
    //简介
    if(StringUtils.isNotBlank(description)){
        Graphics2DUtils.drawString(g, Color.decode("#000000"), new Font("微软雅黑", Font.PLAIN, 28), description, 0, 526, width, 20, 5, true);
    }
    //二维码图片
    g.drawImage(ImageIO.read(qrCodeImg), 202, 654, 348, 348, null);
    //   ```````````结束作画```````````
    //7、处理画作
    g.dispose();
    //8、得到输出流
    ByteArrayOutputStream os = new ByteArrayOutputStream();
    ImageIO.write(bufferedImage, "jpg", os);
    //9、转成base64编码前端可以直接显示,也可转换成其它形式比如文件
    String encodeStr = Base64.getEncoder().encodeToString(os.toByteArray());
    //保存为图片文件
    FileUtils.writeByteArrayToFile(new File("D:/poster/" + nowTime + ".jpg"), os.toByteArray());
    //10、关闭输入输出流
    fis.close();
    os.close();
    //qrCodeImg.delete();
    //petImg.delete();
    return "D:/poster/" + nowTime + ".jpg";

}


/**
 * 将图片处理为圆形图片
 * 传入的图片必须是正方形的才会生成圆形 如果是长方形的比例则会变成椭圆的
 * 
 * @param url
 * @return
 */
public static BufferedImage transferImgForRoundImgage(String url){
    BufferedImage resultImg = null;
    try {
        if (StringUtils.isBlank(url)) {
            return null;
        }
        BufferedImage buffImg1 = ImageIO.read(new URL(url));
        resultImg = new BufferedImage(buffImg1.getWidth(), buffImg1.getHeight(), BufferedImage.TYPE_INT_RGB);
        Graphics2D g = resultImg.createGraphics();
        Ellipse2D.Double shape = new Ellipse2D.Double(0, 0, buffImg1.getWidth(), buffImg1.getHeight());
        // 使用 setRenderingHint 设置抗锯齿
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        resultImg = g.getDeviceConfiguration().createCompatibleImage(buffImg1.getWidth(), buffImg1.getHeight(),
                Transparency.TRANSLUCENT);
        //g.fill(new Rectangle(buffImg2.getWidth(), buffImg2.getHeight()));
        g = resultImg.createGraphics();
        // 使用 setRenderingHint 设置抗锯齿
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g.setClip(shape);
        g.drawImage(buffImg1, 0, 0, null);
        g.dispose();
    } catch (MalformedURLException e) {
    } catch (IOException e) {
    }
    return resultImg;
}

扩展:

根据以上实现逻辑可以进行扩展,将方法抽象出来,减少代码及模板重复开发量,可以制作海报、名片、广告图、通告图等等。


  • 本文分类:生活常识
  • 浏览次数:100 次浏览
  • 本文链接:https://www.deibaike.com/shenghuochangshi/M8OppkgOkG.html
  • 上一篇 > 工商查询营业执照(营业执照注销查询网站查询系统)
  • 下一篇 > 无证驾驶怎么处罚(无证驾驶的处罚规定)
相关文章
  • 强力保险箱全国售后服务电话24小时人工服务热线
    强力保险箱全国售后服务电话24小时人工服务热线售后服务体系——以专业守护您的资产安全.强力保险箱全国售后服务电话24小时人工服务热线客服全国售后服务点热线400-605-8619一、强力保险箱全国售后服务电话24小时人工服务热线全周期保修服务标准保修政策新品购买后提供3年整机免[详细]
  • 杰宝大王保险柜售后服务全国热线故障预约电话
    杰宝大王保险柜售后服务全国热线故障预约电话故障原因及使用维护指南杰宝大王保险柜售后服务全国热线故障预约电话作为存放贵重物品的重要工具,其稳定性和安全性直接影响用户财产安全。然而,长期使用中可能出现故障,影响正常使用。本文将从常见故障原因、使用技巧及售后服务三方面展开分析,帮助用户延长杰宝大[详细]
  • 恒发保险柜全国24小时售后维修服务电话
    恒发保险柜全国24小时售后维修服务电话售后服务与故障维修全指南恒发保险柜全国24小时售后维修服务电话作为财产安全的重要保障工具,其售后服务与故障维修服务直接影响用户的使用体验和财产安全。恒发保险柜全国24小时售后维修服务电话服务内容、维修流程及售后服务的核心要点。恒发保险柜全国24小时[详细]
  • 彩月保险箱售后电话全国服务24小时400人工客服热线
    彩月保险箱售后电话全国服务24小时400人工客服热线售后维修服务指南及常见故障解决方案彩月保险箱售后电话全国服务24小时400人工客服热线全国各售后服务电话400-605-8619一、彩月保险箱售后电话全国服务24小时400人工客服热线售后维修服务流程服务预约彩月保险箱售后电话[详细]
  • 新宝塔保险箱全国各售后服务热线号码
    《新宝塔保险箱全国各售后服务热线号码故障处理与售后服务指南》,采用模块化结构便于阅读:新宝塔保险箱全国各售后服务热线号码售后网点全国各市售后服务电话400-605-8619一、新宝塔保险箱全国各售后服务热线号码常见故障类型解析无法正常开启原因:密码错误次数超限/电路板故障/机械[详细]
最新推荐
  • 强力保险箱全国售后服务电话24小时人工服务热线
  • 杰宝大王保险柜售后服务全国热线故障预约电话
  • 恒发保险柜全国24小时售后维修服务电话
  • 彩月保险箱售后电话全国服务24小时400人工客服热线
  • 新宝塔保险箱全国各售后服务热线号码
  • 多吉保险箱全国各市售后服务电话热线
  • 大一保险箱24小时全国各售后服
  • 驰球保险箱售后维修电话客服中心
  • 虎王保险柜维修-24小时全市区服务热线
  • 恒发保险柜全国24小时售后服务电话号码
热门推荐
  • 庐山的风景特色:自然之峰与文化之境
  • c盘的东西怎么清理 ?电脑c盘垃圾太多不知道怎么清理一招教你解决
  • 贵州三都县有什么旅游景点?3大传统村落,这里藏着不一样的水族风情
  • 居民医保异地就医怎么办理手续 ,哪些人适用?一文了解→
  • 汽车托运|车辆是如何装载托运的呢?
  • 你知道“get off your high horse的俚语 是什么意思吗?
  • 车保险保费上涨怎么算 走保险还是私了?次年保费涨多少?先报案不理赔”不算出险?
  • c盘temp清理? 电脑越用越卡怎么办?5个方法教你释放C盘空间,瞬间多出几个G
  • kick back俚语”不是踢回去!职场人士一定要懂!
  • 车险第三者二百万保费多少钱 ,买多少合适?老司机算笔账

网站内容来自网络,如有侵权请联系我们,立即删除!
Copyright © 得百科 琼ICP备2023010365号-2