春联是中国特有的文学形式和过年重要习俗,以对仗文字描绘美好、抒发愿望。文中介绍智能春联商用及接口价格,还详述相关开发过程:获取AccessToken、Java调用接口,用创客贴模板图,确定文字坐标后,通过Java代码合并文字与图片生成春联图片,同时提及字体等注意事项。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

春联
春联,又称“春贴”、“门对”、“对联”,是过年时所贴的红色喜庆元素“年红”中一个种类。它以对仗工整、简洁精巧的文字描绘美好形象,抒发美好愿望,是中国特有的文学形式,是华人们过年的重要习俗。当人们在自己的家门口贴年红(春联、福字、窗花等)的时候,意味着过春节正式拉开序幕。
每逢春节,无论城市还是农村,家家户户都要挑漂亮的红春联贴于门上,辞旧迎新,增加喜庆的节日气氛。春联的另一来源是春贴,古人在立春日多贴“宜春”二字,后渐渐发展为春联,表达了中国劳动人民一种辟邪除灾、迎祥纳福的美好愿望。
应用背景
智能写诗、智能春联正式商用 单个接口价格680元/千次
接口只是单纯的返回了JSON字符串。这样的内容对于开发者来说,能懂。对于非编程人员来说。那就是一段文字而已。仅仅如此。正因如此,小帅就基于返回的内容做了一个自动生成对联海报的小功能。大佬请不要吐槽~
开始码起来
开通相关应用
这里就不过多说明了。PM在文档写的已经很棒了。图文教程哦~
生成接口必要的AccessToken
https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=APPPARAM&client_secret=APPPARAM
替换APPPARAM
分别代表 API Key 、 Secret Key
替换后直接浏览器访问即可。
Tips: 一定要保存 24. 开头的值哦
Java代码调用接口
相关代码可以直接访问 https://gitee.com/xshuai/worktools 获取
public static void main(String[] args) throws Exception{ //接口必要的AccessToken String accessToken = ""; Couplets bean = new Couplets(); bean.setText("虎年春节"); //body参数转JSON String body = JSON.toJSONString(bean); /** 1、GBK支持:默认按GBK进行编码,输入内容为GBK编码,输出内容为GBK编码,否则会接口报错编码错误 2、UTF-8支持:若文本需要使用UTF-8编码,请在url参数中添加charset=UTF-8 (大小写敏感) */ //拼接URL参数 String params = "charset=UTF-8&access_token="+accessToken; String result = HttpUtil.post(BaiDuConts.COUPLETS_URL + "?" + params, body); //接口返回的内容 System.out.println("result = " + result); }
春联背景模板图准备
小帅丶是通过 创客贴 获取的模板图
把文字去掉当模板图。下载带字的图去查找文字的坐标[这一步也可以试试用百度的文字识别哦,可以快速获取文字坐标]
Java代码进行文字和图片的合并
Tips: Windows默认带有 华文行楷 字体。如果没有请自行下载或更新。Linux应该是没有这些中文字体的。请一定要自行导出并导入 具体可参考:https://aistudio.baidu.com/aistudio/projectdetail/1145381
横批和上下联字体不一致。所以需要分开填充
如果是9字内容。此模板图不一定适用哦。可以考虑更换模板图 或 字体减小
/** 字体 */ private static String FONT_FAMILY = "华文行楷";/** * @Author 小帅丶 * @Description 生成春联图片 * @Date 2022-01-27 11:36 * @param couplets - 春联内容 **/ public static void getCouplets(String couplets) throws Exception{ //字符串转对象 CoupletsResponse coupletsResponse = JSON.parseObject(couplets,CoupletsResponse.class); long startTime = System.currentTimeMillis(); //背景图 BufferedImage image = ImageIO.read(new File("F:testimgcoupletempty.jpg")); String markContent = coupletsResponse.getCouplets().getCenter(); AttributedString ats = new AttributedString(markContent); Graphics2D g = (Graphics2D) image.getGraphics(); // 横批文字填充 Font font = new Font(FONT_FAMILY, Font.PLAIN, 110); g.setStroke(new BasicStroke(2.5f)); g.setColor(new Color(255,229,83)); g.setFont(font); /* 消除java.awt.Font字体的锯齿 */ g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); /* 消除java.awt.Font字体的锯齿 */ ats.addAttribute(TextAttribute.FONT, font, 0, markContent.length()); AttributedCharacterIterator iter = ats.getIterator(); g.drawString(iter,109,180); String markContentLeft = coupletsResponse.getCouplets().getFirst(); String markContentRight = coupletsResponse.getCouplets().getSecond(); setLeftRightContent(markContentLeft,g,"left"); setLeftRightContent(markContentRight,g,"right"); //不压缩图片质量进行保存 ImageWriter writer = ImageIO.getImageWritersBySuffix("jpg").next(); ImageWriteParam imageWriteParam = writer.getDefaultWriteParam(); imageWriteParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); //0-1范围 越大质量越高 imageWriteParam.setCompressionQuality(1); ByteArrayOutputStream output = new ByteArrayOutputStream(); writer.setOutput(new MemoryCacheImageOutputStream(output)); writer.write(null,new IIOImage(image,null,null),imageWriteParam); writer.dispose(); //最终图片保存路径 FileOutputStream file = new FileOutputStream("F:testimgcoupletcouplets.jpg"); file.write(output.toByteArray()); System.out.println("总耗时"+(System.currentTimeMillis()-startTime)); } /** * @Author 小帅丶 * @Description 填充左右内容 * @Date 2022-01-27 11:31 * @param markContent - 对联内容 * @param g - Graphics2D对象 * @param direction - 对联方向-上联、下联 **/ private static void setLeftRightContent(String markContent, Graphics2D g, String direction) { Font font = new Font(FONT_FAMILY, Font.PLAIN, 60); for (int i = 0; i 0){ int height = i*65; g.drawString(singleWordIterator,55,358+height); }else{ g.drawString(singleWordIterator,55,358); } }else{ if(i>0){ int height = i*65; g.drawString(singleWordIterator,530,358+height); }else{ g.drawString(singleWordIterator,530,358); } } } }
以上就是【智能春联】生成海报基于百度云接口实现的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/40247.html
微信扫一扫
支付宝扫一扫