用Java实现春联 支持自定义字体颜色

最近看到一篇 Python代码写春联的文章,什么?!Python能搞,我Java这么牛逼的语言,必须得搞!以彰显我大java的威武,和无所不能!!!

首先找到一张春联背景图案(抱歉,图片素材不好找,那原作者的素材用用!!!)

 接下就是见证奇迹的时刻,上代码

import sun.font.FontDesignMetrics;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;

public class Couplet {

    //设置生成文件存放文件夹
    final static String imageFolderPath = "C:\\Users\\liuya\\Desktop\\img\\";
    //设置背景图
    final static String sourceFilePath = "C:\\Users\\liuya\\Desktop\\img\\background.png";
    //设置字体
    final static String fontName = "宋体";

    public static void main(String[] args) {
        write();
    }

    public static  void write(){
        BufferedImage image = new BufferedImage(640*4, 640+2*640*7, BufferedImage.TYPE_INT_RGB);
        Graphics g = image.createGraphics();
        g.drawImage(writeH("恭喜发财"),0,0,640*4,640,null);
        g.drawImage(writeV("三江进宝百业旺"),0,640,640*2,2*640*7,null);
        g.drawImage(writeV("四海来财万福春"),2*640,640,640*2,2*640*7,null);
        //输出文件
        try {
            ImageIO.write(image,"png",new File(imageFolderPath +"春联.png"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static  BufferedImage writeH(String text){
        char[] ch= text.toCharArray();
        BufferedImage image = new BufferedImage(640*ch.length, 640, BufferedImage.TYPE_INT_RGB);
        Graphics g = image.createGraphics();
        for (int i = 0; i < ch.length; i++) {
            char c = ch[i];
            g.drawImage(fontMark(String.valueOf(c)),640*i,0,640,640,null);
        }
        g.dispose();
        return image;
    }

    public static  BufferedImage writeV(String text){
        char[] ch= text.toCharArray();
        BufferedImage image = new BufferedImage(2*640, 2*640*ch.length, BufferedImage.TYPE_INT_RGB);
        Graphics g = image.createGraphics();
        for (int i = 0; i < ch.length; i++) {
            char c = ch[i];
            g.drawImage(fontMark(String.valueOf(c)),0,2*640*i,2*640,2*640,null);
        }
        g.dispose();
        return image;
    }

    public static BufferedImage fontMark(String content) {
        try {
            BufferedImage image = ImageIO.read(new File(sourceFilePath));
           return fontMark(image, content);
        } catch (IOException e) {
            return null;
        }
    }

    //文字标记
    public static BufferedImage fontMark(BufferedImage bufImg, String content) {
        Font font = new Font(fontName, Font.BOLD, 400);
        FontDesignMetrics metrics = FontDesignMetrics.getMetrics(font);
        Graphics2D graphics = bufImg.createGraphics();
        graphics.setColor(Color.black);
        graphics.setFont(font);
        graphics.drawString(content, 120, 460);
        graphics.dispose();
        System.out.println(content);
        return bufImg;
    }

}

启动方法:idea编辑器里运行主方法即可。

看效果,上图

 合成一张图里,方便打印,剪裁,哈哈!!!

到此这篇关于用Java编写春联 支持自定义字体颜色的文章就介绍到这了,更多相关Java春联内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 用Java代码实现一幅春联详解

    快过年了,闲来无事,那就用自己的专业发挥一下作用吧.接下来我们就用java代码写一幅春联呗.具体代码如下: 模板图片如下: package com.zmh.daily.spring; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; /** * 春联 * * @version v

  • 用Java实现春联 支持自定义字体颜色

    最近看到一篇 Python代码写春联的文章,什么?!Python能搞,我Java这么牛逼的语言,必须得搞!以彰显我大java的威武,和无所不能!!! 首先找到一张春联背景图案(抱歉,图片素材不好找,那原作者的素材用用!!!)  接下就是见证奇迹的时刻,上代码 import sun.font.FontDesignMetrics; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage;

  • C# Winform使用扩展方法实现自定义富文本框(RichTextBox)字体颜色

    在利用C#开发Winform应用程序的时候,我们有可能使用RichTextBox来实现实时显示应用程序日志的功能,日志又分为:一般消息,警告提示和错误等类别.为了更好地区分不同类型的日志,我们需要使用不同的颜色来输出对应的日志,比如:一般消息为绿色,警告提示的用橙色,错误的用红色字体. 在原生Winform的RichTextBox中,是没有这种设置选项的.如需实现以上描述的功能,我们可以使用.NET的静态扩展方法来处理.实现扩展方法的类和方法本身都必须是静态的,如果你对扩展方法还不是太了解,建议

  • Android 微信6.1 tab栏图标和字体颜色渐变的实现

    相信大家都见到了微信图标颜色渐变的过程,是不是感觉很牛逼?不得不说微信团队确实是很厉害的团队,不管是从设计还是开发人员. 今天我带大家来看看,微信 tab 栏图标和字体颜色渐变的过程.先上图吧!今天学了一招制作 gif 动态图的快捷方法.刚好用的上,以前一直想写点什么东西, 苦于一直不知道怎么生成动态图,现在终于学会了,哈哈,让我偷偷的乐一会.额,还是上图吧... 好了,效果图也看到了,那么我也就不多啰嗦了,直接进入主题,看代码 [java] view plain copy package mo

  • Android 实现不同字体颜色的TextView实现代码

    Android 实现不同字体颜色的TextView 遇到的需求,mark一下. 实现代码: package com.chuck.recyclerviewdemo; import android.content.Context; import android.graphics.Canvas; import android.text.SpannableStringBuilder; import android.text.Spanned; import android.text.style.Foreg

  • Android自定义状态栏颜色与APP风格保持一致的实现方法

    我们知道iOS上的应用,状态栏的颜色总能与应用标题栏颜色保持一致,用户体验很不错,那安卓是否可以呢?若是在安卓4.4之前,答案是否定的,但在4.4之后,谷歌允许开发者自定义状态栏背景颜色啦,这是个不错的体验!若你手机上安装有最新版的qq,并且你的安卓SDK版本是4.4及以上,你可以看下它的效果: 实现此功能有两种方法: 1.在xml中设置主题或自定义style: Theme.Holo.Light.NoActionBar.TranslucentDecor Theme.Holo.NoActionBa

  • 解析Android中使用自定义字体的实现方法

    1.Android系统默认支持三种字体,分别为:"sans", "serif", "monospace 2.在Android中可以引入其他字体 . 复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?><TableLayout xmlns:Android="http://schemas.android.com/apk/res/android&qu

  • iOS 修改alertViewController弹框的字体颜色及字体的方法

    系统默认的字体是黑色,按钮颜色是蓝色或者红色的,我们怎样自定义字体呢 Codeing Show UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"提示" message:@"确认退出登录?" preferredStyle:(UIAlertControllerStyleAlert)]; UIAlertAction *cancelAction = [UIAlertActi

  • iOS开发技巧之状态栏字体颜色的设置方法

    状态栏的字体为黑色:UIStatusBarStyleDefault 状态栏的字体为白色:UIStatusBarStyleLightContent 一.在info.plist中,将View controller-based status bar appearance设为NO 状态栏字体的颜色只由下面的属性设定,默认为白色: // default is UIStatusBarStyleDefault [UIApplication sharedApplication].statusBarStyle 解

  • layui table设置某一行的字体颜色方法

    table自带的可以设置某一个单元格颜色,必须根据内容来修改,对于很多列同时修改并不方便,直接使用js操作比较简单. 首先自定义一个div,内部存放table,根据class找到table,然后找到行tr,修改其样式中的颜色. //设置layui datatable的某一行的颜色 //TabDivId:tab父div id;RowIndex:行序列号,从0开始:ColorString:颜色字符串,如'#123456' function Layui_SetDataTableRowColor(Tab

  • Android中颜色选择器和改变字体颜色的实例教程

    1.构建一张七彩图: 我们经常看到这种样子的颜色选择器吧.. 然后其实右边的亮度选择是: 这样我们的代码就可以进行啦... // 创建七彩图片 private void init() { int[] oc = { 0xffff0000, 0xffffff00, 0xff00ff00, 0xff00ffff, 0xff0000ff, 0xffff00ff, 0xffff0000 }; float[] op = { 0, 0.16667f, 0.33333f, 0.5f, 0.66667f, 0.8

随机推荐