转换文字为符号

2021-01-17 00:00:00 符号 文字 转换

思路:将字符串通过画笔,画到图像中,然后遍历图像的长宽,一个点一个点的取出该点的RGB颜色。 如果如果为文字的颜色。就用指定的字符串填充。否则也用指定的字符串填充。

package com.zf.test;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;

public class Transform {
	
	public static final String FILL = "*";
	public static final String EMPTY = " ";
	public static final int NARROW = 2 ;	//缩小倍数
	public static final int FONT_SIZE = 90;	//文字大小
	public static final String FONT_TYPE = "楷体";
	public static final int IMG_HEIGHT = 80 ;		
	public static final int FONT_WIDTH = 100 ;	//每个文字在图片中的宽度
	public static final int FONT_X = 0 ;	
	public static final int FONT_Y = 70 ;
	public static final int COLOR_ALLOWANCE = 100 ;	//颜色容差
	
	public static void main(String[] args) {
		
		String result = transform("说好的729呢");
		
		System.out.println(result);
	}

	public static String transform(String input){
		
		StringBuilder sb = new StringBuilder() ;

		/*根据文字长度,创建指定长度的Image,然后将文字写入到Image中*/
		BufferedImage bi = new BufferedImage( input.length() * FONT_WIDTH , IMG_HEIGHT , BufferedImage.TYPE_INT_RGB ) ;
		Graphics g = bi.getGraphics() ;
		Font font = new Font(FONT_TYPE , Font.BOLD , FONT_SIZE );
		g.setFont(font);  
		g.drawString( input , FONT_X , FONT_Y);

		int width = bi.getWidth() ;
		int height = bi.getHeight() ;

		/* 根据图像的长宽,逐个遍历图像的点 */
		for (int i = 0; i < height  ; i += NARROW) {

			for (int j = 0; j < width ; j += NARROW) {

				Color  color = new Color(bi.getRGB(j , i));

				int rc = (int)(Math.pow((Color.WHITE.getRed() - color.getRed()) , 2) + 
						Math.pow((Color.WHITE.getGreen() - color.getGreen()) , 2) + 
						Math.pow((Color.WHITE.getBlue() - color.getBlue()) , 2)) ;
  
				/* 根据容差值填充字符串 */
				String tmp = rc < COLOR_ALLOWANCE ? FILL :  EMPTY;
				
				sb.append(tmp);
			}
			sb.append("\n");
		}
		
		return sb.toString() ;
	}

}

打印结果(截图):

《转换文字为符号》

    原文作者:_jerrytiger
    原文地址: https://blog.csdn.net/is_zhoufeng/article/details/9861177
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。

相关文章