用ascii字符画图像

849 ℃

1、css样式

body {
  background: #222222;
}

.morph-section {
  width: 400px;
  height: 400px;

  position: absolute;
  left: 50%;
  top: 50%;
  margin-top: -200px;
  margin-left: -200px;
  font-family: monospace;
  color: #fff;
}

.info {
  font-family: monospace;
  position: absolute;
  line-height: 20px;
  font-size: 14px;
  left: 20px;
  bottom: 20px;
  color: #fff;
}

a {
  color: #f9f9f9;
}

2、html代码

<pre class="morph-section"></pre>

3、js代码

var AsciiMorph = (function() {

  'use strict';
  
  var element = null;
  var canvasDimensions = {};
  
  var renderedData = [];
  var framesToAnimate = [];
  var myTimeout = null;

  function extend(target, source) {
	for (var key in source) {
	  if (!(key in target)) {
		target[key] = source[key];              
	  }
	}
	return target;
  }
  
  function repeat(pattern, count) {
	  if (count < 1) return '';
	  var result = '';
	  while (count > 1) {
		  if (count & 1) result += pattern;
		  count >>= 1, pattern += pattern;
	  }
	  return result + pattern;
  }
  
  function replaceAt(string, index, character ) {
	return string.substr(0, index) + character + string.substr(index+character.length);
  }
  
  function init(el, canvasSize) {
	
	// Save the element
	element = el;
	canvasDimensions = canvasSize;
  }
  
  function squareOutData(data) {
	 var i;
	var renderDimensions = {
	  x: 0,
	  y: data.length
	};

	// Calculate centering numbers
	for( i = 0; i < data.length; i++ ) {
	  if( data[i].length > renderDimensions.x) {
		renderDimensions.x = data[i].length
	  }
	}
	
	// Pad out right side of data to square it out
	for( i = 0; i < data.length; i++ ) {
	  if( data[i].length < renderDimensions.x) {
		data[i] = (data[i] + repeat(' ', renderDimensions.x - data[i].length ));
	  }
	}
	
	var paddings = {
	  x: Math.floor((canvasDimensions.x - renderDimensions.x) / 2),
	  y: Math.floor((canvasDimensions.y - renderDimensions.y) / 2)
	}
	
	// Left Padding
	for( var i = 0; i < data.length; i++ ) {
	  data[i] = repeat(' ', paddings.x) + data[i] + repeat(' ', paddings.x);
	}
	
	// Pad out the rest of everything
	for( var i = 0; i < canvasDimensions.y; i++ ) {
	  if( i < paddings.y) {
		data.unshift( repeat(' ', canvasDimensions.x));
	  } else if (i > (paddings.y + renderDimensions.y)) {
		data.push( repeat(' ', canvasDimensions.x));
	  }
	}
	
	return data;
  }
  
  // Crushes the frame data by 1 unit.
  function getMorphedFrame(data) {
	
	var firstInLine, lastInLine = null;
	var found = false;
	for( var i = 0; i < data.length; i++) {
	  
	  var line = data[i];
	  firstInLine = line.search(/\S/);
	  if( firstInLine === -1) {
		firstInLine = null;
	  }
	  
	  for( var j = 0; j < line.length; j++) {
		if( line[j] != ' ') {
		  lastInLine = j;
		}
	  }
	  
	  if( firstInLine !== null && lastInLine !== null) {
		data = crushLine(data, i, firstInLine, lastInLine)
		found = true;
	  }
  
	  firstInLine = null, lastInLine = null;
	}
	
	if( found ) {
	  return data;
	} else {
	  return false;
	}
  }
  
  function crushLine(data, line, start, end) {
	
	var centers = {
	  x: Math.floor(canvasDimensions.x / 2),
	  y: Math.floor(canvasDimensions.y / 2)
	}
	
	var crushDirection = 1;
	if( line > centers.y ) {
	  crushDirection = -1;
	}
	
	var charA = data[line][start];
	var charB = data[line][end];
	
	data[line] = replaceAt(data[line], start, " ");
	data[line] = replaceAt(data[line], end, " ");

	if( !((end - 1) == (start + 1)) && !(start === end) && !((start + 1) === end)) {
	  data[line + crushDirection] = replaceAt(data[line + crushDirection], (start + 1), '+*/\\'.substr(Math.floor(Math.random()*'+*/\\'.length), 1));
	  data[line + crushDirection] = replaceAt(data[line + crushDirection], (end - 1), '+*/\\'.substr(Math.floor(Math.random()*'+*/\\'.length), 1));
	} else if ((((start === end) || (start + 1) === end)) && ((line + 1) !== centers.y && (line - 1) !== centers.y && line !== centers.y)) {
	  data[line + crushDirection] = replaceAt(data[line + crushDirection], (start), '+*/\\'.substr(Math.floor(Math.random()*'+*/\\'.length), 1));
	  data[line + crushDirection] = replaceAt(data[line + crushDirection], (end), '+*/\\'.substr(Math.floor(Math.random()*'+*/\\'.length), 1));
	}
	
	return data;
  }
  
  function render(data) {
	var ourData = squareOutData(data.slice());
	renderSquareData(ourData);
  }
  
  function renderSquareData(data) {
	element.innerHTML = '';
	for( var i = 0; i < data.length; i++ ) {
	  element.innerHTML = element.innerHTML + data[i] + '\n';
	}
	
	renderedData = data;
  }
  
  // Morph between whatever is current, to the new frame
  function morph(data) {
	
	clearTimeout(myTimeout);
	var frameData = prepareFrames(data.slice());
	animateFrames(frameData);
  }
  
  function prepareFrames(data) {
	
	var deconstructionFrames = [];
	var constructionFrames = [];

	var clonedData = renderedData
	
	// If its taking more than 100 frames, its probably somehow broken
	// Get the deconscrution frames
	for(var i = 0; i < 100; i++) {
	  var newData = getMorphedFrame(clonedData);
	  if( newData === false) {
		break;
	  }
	  deconstructionFrames.push(newData.slice(0)); 
	  clonedData = newData;
	}
	
	// Get the constuction frames for the new data
	var squareData = squareOutData(data);
	constructionFrames.unshift(squareData.slice(0));
	for( var i = 0; i < 100; i++ ) {
	  var newData = getMorphedFrame(squareData);
	  if( newData === false) {
		break;
	  }
	  constructionFrames.unshift(newData.slice(0));
	  squareData = newData;
	}
	
	return deconstructionFrames.concat(constructionFrames)
  }
  
  function animateFrames(frameData) {
	framesToAnimate = frameData;
	animateFrame();
  }
  
  function animateFrame() {
	myTimeout = setTimeout(function() {
	  
	  renderSquareData(framesToAnimate[0]);
	  framesToAnimate.shift();
	  if( framesToAnimate.length > 0 ) {
		animateFrame();
	  }
	}, 20)

	// framesToAnimate
  }

  function main(element, canvasSize) {
	
	if( !element || !canvasSize ) {
	  console.log("sorry, I need an element and a canvas size");
	  return;   
	}
	
	init(element, canvasSize);
  }

  return extend(main, {
	render: render,
	morph: morph
  });
  
})();

var element = document.querySelector('pre');
AsciiMorph(element, {x: 51,y: 28});

var asciis = [[
"                _ooOoo_",
"               o8888888o",
"               88\" . \"88",
"               (| -_- |)",
"               O\\  =  /O",
"            ____/`---'\\____",
"          .'  \\\\|     |//  `.",
"         /  \\\\|||  :  |||//  \\",
"        /  _||||| -:- |||||_  \\",
"        |   | \\\\\\  -  /'| |   |",
"        | \\_|  `\\`---'//  |_/ |",
"        \\  .-\\__ `-. -'__/-.  /",
"      ___`. .'  /--.--\\  `. .'___",
"   .\"\" '<  `.___\\_<|>_/___.' _> \\\"\".",
"  | | :  `- \\`. ;`. _/; .'/ /  .' ; |",
"  \\  \\ `-.   \\_\\_`. _.'_/_/  -' _.' /",
"===`-.`___`-.__\\ \\___  /__.-'_.'_.-'===",
"                `=--=-'    "
],

[
"                             /",
"                            /",
"                           /;",
"                          //",
"                         ;/",
"                       ,//",
"                   _,-' ;_,,",
"                _,'-_  ;|,'",
"            _,-'_,..--. |",
"    ___   .'-'_)'  ) _)\\|      ___",
"  ,'\"\"\"`'' _  )   ) _)  ''--'''_,-'",
"-={-o-  /|    )  _)  ) ; '_,--''",
"  \\ -' ,`.  ) .)  _)_,''|",
"   `.\"(   `------''     /",
"     `.\\             _,'",
"       `-.____....-\\\\",
"                 || \\\\",
"                 // ||",
"                //  ||",
"            _-.//_ _||_,",
"              ,'  ,-'/"
],

[
"      \\`.     ___",
"       \\ \\   / __>0",
"   /\\  /  |/' / ",
"  /  \\/   `  ,`'--.",
" / /(___________)_ \\",
" |/ //.-.   .-.\\\\ \\ \\",
" 0 // :@ ___ @: \\\\ \/",
"   ( o ^(___)^ o ) 0",
"    \\ \\_______/ /",
"/\\   '._______.'--.",
"\\ /|  |<_____>    |",
" \\ \\__|<_____>____/|__",
"  \\____<_____>_______/",
"      |<_____>    |",
"      |<_____>    |",
"      :<_____>____:",
"     / <_____>   /|",
"    /  <_____>  / |",
"   /___________/  |",
"   |           | _|__",
"   |           | ---||_",
"   |   |L\\/|/  |  | [__]",
"   |  \\|||\\|\\  |  /",
"   |           | /",
"   |___________|/"
],

[
"     .--------.",
"    / .------. \\",
"   / /        \\ \\",
"   | |        | |",
"  _| |________| |_",
".' |_|        |_| '.",
"'._____ ____ _____.'",
"|     .'____'.     |",
"'.__.'.'    '.'.__.'",
"'.__  |      |  __.'",
"|   '.'.____.'.'   |",
"'.____'.____.'____.'",
"'.________________.'",
],

[
"         ____",
"        o8%8888,",
"      o88%8888888.",
"     8'-    -:8888b",
"    8'         8888",
"   d8.-=. ,==-.:888b",
"   >8 `~` :`~' d8888",
"   88         ,88888",
"   88b. `-~  ':88888",
"   888b ~==~ .:88888",
"   88888o--:':::8888",
"   `88888| :::' 8888b",
"   8888^^'       8888b",
"  d888           ,%888b.",
" d88%            %%%8--'-.",
"/88:.__ ,       _%-' ---  -",
"    '''::===..-'   =  --.  `",
 ],

 [
"      _      _      _",
"   __(.)< __(.)> __(.)=",
"   \\___)  \\___)  \\___)  ",
"          _      _      _",
"       __(.)< __(.)> __(.)=",
"       \\___)  \\___)  \\___)   ",
"      _      _      _",
"   __(.)< __(.)> __(.)=",
"   \\___)  \\___)  \\___)   ",
"          _      _      _",
"       __(.)< __(.)> __(.)=",
"       \\___)  \\___)  \\___)  "
 ]];

AsciiMorph.render(asciis[0]);

var currentIndex = 2;

setTimeout(function() {
  AsciiMorph.morph(asciis[1]);
}, 1000);

setInterval(function() {
  AsciiMorph.morph(asciis[currentIndex]);
  currentIndex++;
  currentIndex%= asciis.length;
}, 3000);

php如何将ASCII码转成数值

php如何利用ord()函数将字符转ascii码

console.log输出图片和ascii

标签: ascii

上面是“用ascii字符画图像”的全面内容,想了解更多关于 好玩 内容,请继续关注web建站教程。

当前网址:https://m.ipkd.cn/webs_89.html

声明:本站提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请发送到邮箱:admin@ipkd.cn,我们会在看到邮件的第一时间内为您处理!

php语法结合高德地图实现地图的定位功能
js如何快速判断object是否为空对象
dede查询列表中单独显示查到了多少条记录
js如何判断当前否是为数组(Array.isArray()函数)
LeaferUI之HTML5 Canvas 2D 图形UI绘图框架安装示例