台式电脑

电脑怎么样才能做名片壁纸(制作属于自己的海报或名片)

#头条创作挑战赛#

今天是新年开工第一天,在这里先祝大家开工大吉,恭喜发财!

在开工的第一天我就迫不及待的想跟大家分享一些比较实用的技术,希望在2023年能够和大家一起共同成长,共同进步,在2023年能够实现自己的目标和理想,今天跟大家分享的技术是Java自定义生成海报。

历史回顾:

可以直接拿来做项目的开源框架

盘点13个程序员居家办公可以接私活的平台,赚麻了

程序员常用开源小工具

搭建属于自己的CMS系统

开箱即用的炫酷中后台前端开源框架第二篇

实现自定义表单及流程设计的低代码开发平台LittleAnt-MS

简介:

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

准备:

1、准备一张背景图

2、准备头像图片

实现:

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

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

FileInputStreamfis=newFileInputStream(newFile(""E:\\poster\\back.png""));

2、创建背景图片对象

ImagesrcImg=ImageIO.read(fis);

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

BufferedImagebufferedImage=newBufferedImage(

//宽度

srcImg.getWidth(null),

//高度

srcImg.getHeight(null),

//图片类型

BufferedImage.TYPE_INT_RGB);

4、创建2D画笔对象

Graphics2Dg=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"),newFont("微软雅黑",Font.BOLD,48),nickName,0,338,width,12,5,true);

//绘制二维码

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

7、处理画作

g.dispose();

8、得到输出流

ByteArrayOutputStreamos=newByteArrayOutputStream();

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

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

具体代码:

publicStringcreatePoster(StringnickName,StringidNum,Stringdescription,StringavatarDir,StringqrcodeDir)throwsException{StringresourcePath=PosterUtils.class.getResource("/image/").getPath();longnowTime=System.currentTimeMillis();FileqrCodeImg=newFile(qrcodeDir);FilefileBg=newFile("F:\\poster\\back.png");//1、背景图片输入流FileInputStreamfis=newFileInputStream(fileBg);//2、背景图片对象ImagesrcImg=ImageIO.read(fis);//3、创建画布,根据背景图片的宽高BufferedImagebufferedImage=newBufferedImage(//宽度srcImg.getWidth(null),//高度srcImg.getHeight(null),//图片类型BufferedImage.TYPE_INT_RGB);intwidth=bufferedImage.getWidth();intheight=bufferedImage.getHeight();System.out.println("width:"+width);System.out.println("height:"+height);//4、得到2d画笔对象Graphics2Dg=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、```````````开始作画```````````/*FontrewardFirstFont=newFont("PingFangSCBold",Font.PLAIN,24);FontrewardLastFont=newFont("PingFangSCBold",Font.PLAIN,48);*///头像图片if(StringUtils.isNotBlank(avatarDir)){//URLavatarUrl=newURL(avatarDir);g.drawImage(transferImgForRoundImgage(avatarDir),278,76,196,196,null);}//昵称Graphics2DUtils.drawString(g,Color.decode("#000000"),newFont("微软雅黑",Font.BOLD,48),nickName,0,338,width,12,5,true);//ID号Graphics2DUtils.drawString(g,Color.decode("#999999"),newFont("微软雅黑",Font.PLAIN,32),idNum,0,408,width,12,5,true);//简介if(StringUtils.isNotBlank(description)){Graphics2DUtils.drawString(g,Color.decode("#000000"),newFont("微软雅黑",Font.PLAIN,28),description,0,526,width,20,5,true);}//二维码图片g.drawImage(ImageIO.read(qrCodeImg),202,654,348,348,null);//```````````结束作画```````````//7、处理画作g.dispose();//8、得到输出流ByteArrayOutputStreamos=newByteArrayOutputStream();ImageIO.write(bufferedImage,"jpg",os);//9、转成base64编码前端可以直接显示,也可转换成其它形式比如文件StringencodeStr=Base64.getEncoder().encodeToString(os.toByteArray());//保存为图片文件FileUtils.writeByteArrayToFile(newFile("D:/poster/"+nowTime+".jpg"),os.toByteArray());//10、关闭输入输出流fis.close();os.close();//qrCodeImg.delete();//petImg.delete();return"D:/poster/"+nowTime+".jpg";}/***将图片处理为圆形图片*传入的图片必须是正方形的才会生成圆形如果是长方形的比例则会变成椭圆的**@paramurl*@return*/publicstaticBufferedImagetransferImgForRoundImgage(Stringurl){BufferedImageresultImg=null;try{if(StringUtils.isBlank(url)){returnnull;}BufferedImagebuffImg1=ImageIO.read(newURL(url));resultImg=newBufferedImage(buffImg1.getWidth(),buffImg1.getHeight(),BufferedImage.TYPE_INT_RGB);Graphics2Dg=resultImg.createGraphics();Ellipse2D.Doubleshape=newEllipse2D.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(newRectangle(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(MalformedURLExceptione){}catch(IOExceptione){}returnresultImg;}扩展:

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

电脑怎么样才能做名片壁纸(制作属于自己的海报或名片)

说明:

您的关注和评论是对我最大的支持,想要代码实现的可以评论+私信海报,私信细聊。

相关新闻

返回顶部