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

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

时间: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
  • 上一篇 > 工商查询营业执照(营业执照注销查询网站查询系统)
  • 下一篇 > 无证驾驶怎么处罚(无证驾驶的处罚规定)
相关文章
  • 为什么电工套管有多长(一文教会你选购电工套管)
    装修大计,水电先行,电路作为隐蔽工程,一旦发生事故,轻则全屋短路,重则引发事故。可见做好电线布局十分重要,电线不能直接埋进墙体或者地面,应该进行穿线,防止电线绝缘层受损。因此,一款好的电工套管显得十分重要。然而,市面上的电工套管琳琅满目,如何选择一款性价比高、质量过硬的电工套管成了摆在业主面前的一道[详细]
  • 店里为什么要放植物(5种“招财花”,生意人养上“它”财源滚滚)
    爱养花的朋友来自各个领域,商人也是其中之一。大部分花店都为很多商务场所和家庭提供了各种花卉盆栽。他们对花卉的挑选和摆放都有很高的要求。今天这几种很受商业人士喜爱的花,不仅好看还有好寓意!白掌白掌,也被称为“一帆风顺”,代表着万事顺利。它四季常青,不会掉叶,适合在酸性泥炭土中生长,喜欢半阴半阳的环境,[详细]
  • 为什么紫檀有黑斑(小叶紫檀变色陷阱!)
    小叶紫檀的“变色魔法”让玩家又爱又恨——有人盘出帝王紫,有人却盘成黑煤球!今天从科学原理到实操避坑,手把手教你掌控变色节奏,告别“盘毁”焦虑!一、小叶紫檀颜色进化全阶段新料阶段(0-3个月)橘红色:新切面如新鲜胡萝卜,阳光下泛金属光泽避坑点:警惕染色做旧!真新料颜色鲜活,假货发暗发灰氧化初期(3-6[详细]
  • 酒店为什么都地毯(酒店地毯如何选择)
    地毯是酒店行业普遍使用到的一种软装材料,由于地毯的投入和维护成本较高并随着多种地面材料的出现,如强化地板、同质地垫以及地砖工艺的提高,酒店逐步减少了地毯的使用量,但地毯不可替代的优势,依然无法撼动地毯在酒店行业的应用。地毯有哪些优势呢?美化环境、阻隔灰尘、降低噪音、保温、提升档次等诸多优点,是别的地[详细]
  • 什么化肥好用又安全(种菜还是用这五种肥料)
    作为一种新型的绿色肥料,稀土元素肥料在这几年的农业生产中变得越来越受众人关注。因为这类肥料可以提升作物的生长水平,那么都有哪些肥料呢?用这些肥料种出来的作物又有哪些优势呢?稀土元素肥料。稀土元素肥料是应用了以稀土元素为主的新的化学成分配比合成研制开发出的一种新型绿色肥料。这种肥料是以稀土元素的化合物[详细]
最新推荐
  • 为什么电工套管有多长(一文教会你选购电工套管)
  • 店里为什么要放植物(5种“招财花”,生意人养上“它”财源滚滚)
  • 为什么紫檀有黑斑(小叶紫檀变色陷阱!)
  • 酒店为什么都地毯(酒店地毯如何选择)
  • 什么化肥好用又安全(种菜还是用这五种肥料)
  • 为什么实木也有甲醛(木地板甲醛多久能挥发完?)
  • 为什么鱼池要做循环水(鱼池循环水系统怎么做,循环水有什么好处)
  • 为什么海芋有毒(海芋原来有毒?)
  • 为什么烧水器插头烧焦(电热水器的插头十几分钟就发烫,正常吗?)
  • 为什么会有黑色的花(自然界有黑色的花吗?)
热门推荐
  • 庐山的风景特色:自然之峰与文化之境
  • c盘的东西怎么清理 ?电脑c盘垃圾太多不知道怎么清理一招教你解决
  • 贵州三都县有什么旅游景点?3大传统村落,这里藏着不一样的水族风情
  • 居民医保异地就医怎么办理手续 ,哪些人适用?一文了解→
  • 汽车托运|车辆是如何装载托运的呢?
  • 你知道“get off your high horse的俚语 是什么意思吗?
  • 车保险保费上涨怎么算 走保险还是私了?次年保费涨多少?先报案不理赔”不算出险?
  • c盘temp清理? 电脑越用越卡怎么办?5个方法教你释放C盘空间,瞬间多出几个G
  • kick back俚语”不是踢回去!职场人士一定要懂!
  • 车险第三者二百万保费多少钱 ,买多少合适?老司机算笔账

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