just for fun
代码可以直接运行,所有参数都提取成了常量,几乎都可以修改(除了256色阶)
Java 版本
package graph;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**
* 随机产生类似Github的马赛克风格头像
* @author LLH
*/
public class GenerateMosaicHeadImg {
/** 背景颜色 */
private final static Color BACK_GROUND_COLOR = new Color(238, 238, 238);
/** 图片宽 */
private final static int IMG_WIDTH = 360;
/** 图片高 */
private final static int IMG_HEIGHT = 360;
/** 图片边缘内边距 */
private final static int PADDING = 30;
/** 填充比率,越接近1,有色色块出现几率越高 */
private final static double RADIO = 0.45;
/** 每边矩形数量(建议>=5) */
private final static int BLOCK_NUM = 9;
/** 颜色差值评价值(越大颜色越鲜艳) */
private final static int COLOR_DIFF_EVALUATION = 100;
/** 基色阶数极限 */
private final static int COLOR_LIMIT = 256;
/** 保存路径 */
private final static String DIR = "D://headImg/";
public static void main(String[] args) throws IOException {
//得到图片缓冲区
BufferedImage bi = new BufferedImage
(IMG_WIDTH, IMG_HEIGHT, BufferedImage.TYPE_INT_RGB);
//得到它的绘制环境(这张图片的笔)
Graphics2D g2 = (Graphics2D) bi.getGraphics();
//设置背景颜色
g2.setColor(BACK_GROUND_COLOR);
g2.fillRect(0, 0, IMG_WIDTH, IMG_HEIGHT);
// 随机颜色
Color mainColor = getRandomColor();
// 随机生成有效块坐标集合
List<Point> pointList = getRandomPointList(RADIO);
// 填充图形
fillGraph(g2, pointList, mainColor);
File file = new File(DIR);
if (!file.exists()) {
file.mkdirs();
}
// 输出
ImageIO.write(bi,"JPG",
new FileOutputStream(DIR+System.currentTimeMillis()+".jpg"));//保存图片 JPEG表示保存格式
}
/**
* 填充图形
* @param g2 画笔
* @param pointList 填充块坐标
* @param mainColor 填充颜色
*/
private static void