需求:
F12控制台打印彩色自定义图片
实现是伪实现,还得基于别人的程序把图片转换成字符化以后自己再转换成console展示。以下描述实现方式。
先去该网站上将自己图片转换成字符串,然后F12去拿到他的html格式样式文件
拿到该段样式文件 copy Element,复制到本地一个txt文件中。
将该段样式Uedit或者其他文本软件中,进行XML格式化。然后去掉头尾的<div></div>标签。
然后到写的一个工具类中跑一下,得到console版本的打印代码。
package xyz.diuut;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
/**
* @Author Diuut
* @Date 2020/8/15 19:32
*/
public class consoleUtil {
//console打印图画
public static void main(String[] args) {
//此处就是处理了头尾的txt样式文件
List<String> strList = getList("C:\\Users\\82425\\Desktop\\test.txt");
StringBuilder result = new StringBuilder();
StringBuilder temp3 = new StringBuilder();
for (String s : strList) {
if (!s.contains("<br>")) {
temp3.append(s + "&&");
}
if (s.contains("<br>")) {
if (temp3 == null) {
continue;
}
String consoleStr = getConsoleStr(temp3.toString());
result.append(consoleStr);
temp3 = new StringBuilder();
}
}
System.out.println(result);
//这里可以输入到文件中,也可以直接控制台取,我偷懒直接控制台复制得了。
}
public static String getConsoleStr(String strr) {
List<String> urlList = Arrays.asList(strr.split("&&"));
List colorList = new LinkedList();
List strList = new LinkedList();
for (String s : urlList) {
int index1 = s.indexOf('"');
if (s.length() < 14) {
continue;
}
String color = s.substring(index1 + 1, index1 + 8);
colorList.add(color);
int index2 = s.indexOf('>');
int index3 = s.indexOf("</");
String str = s.substring(index2 + 1, index3);
strList.add(str);
}
String perString = "console.log(";
String endString = ");";
String andString = ",";
StringBuilder colorString = new StringBuilder();
StringBuilder strString = new StringBuilder();
StringBuilder sumStr = new StringBuilder();
for (int i = 0; i < colorList.size(); i++) {
String tempStr1 = (String) colorList.get(i);
String tempStr2 = (String) strList.get(i);
if (i != colorList.size() - 1) {
colorString.append("\"color:" + tempStr1 + "\",");
sumStr.append("\"%c" + tempStr2 + "\"+");
} else {
colorString.append("\"color:" + tempStr1 + "\"");
sumStr.append("\"%c" + tempStr2 + "\"");
}
}
String result = perString + sumStr + andString + colorString + endString;
return result;
}
/**
* 根据路径文件生成列表
*
* @param path 地址
* @return
*/
public static List<String> getList(String path) {
File listFile = new File(path);
List<String> urlList = new ArrayList<String>();
if (listFile.exists()) {
try {
urlList = Files.readAllLines(listFile.toPath());
} catch (IOException ex) {
ex.printStackTrace();
}
if (urlList.isEmpty()) {
System.out.println("路径文件生成为空");
return null;
}
}
return urlList;
}
}
将格式化后的代码复制下来,建议再将代码根据console.log进行换行替换^pconsole.log(^p 换行符),以免一行内容过多编辑器无法正常展示。然后就可以去自己想要展示的页面上打印了,头尾要包一下
<script type="text/javascript" language="javascript">
if(window.console&&window.console.log){
<!--中间就将上面格式化得到的代码复制进来->
console.log("%c00","color:#FDFDFD");
<!--中间就将上面格式化得到的代码复制进来-->
}
</script>
其实实现打印很简单,直接写都可以,但图片的话色彩丰富,工作量太大了,作为程序员就没必要做那种重复无脑,便写一个类处理下,虽然可能其他地方没什么用,也没什么学习意义,或许,这就是快乐吧。