將圖片轉化成字符轉成的圖,就是下面那個,網上這個功能的python代碼不少。可是沒有js的,我以爲挺有意思就用js搞了下~javascript
本質是將圖片轉化成灰度照片(就是黑白照片的意思),而後根據每一個像素的灰度不一樣,替換成不一樣的字符(灰度越大——顏色越深,用的字符就便複雜——筆畫越多),而後比較重要的就是字符通常高度比寬度大,因此讀數組時,高度是跳一行一讀(也不是我想的,人家python代碼早就有,效果確實很好),而後我就console.log就行了!html
// 我這裏不少參數是寫死的,像畫布的高寬,應該優化成可配置的
<!doctype html>
<html lang="en">
<head>
<title>GET VIDEO</title>
<meta charset="utf-8">
</head>
<body>
<input id="photoimg" type="file" accept="image/*" onchange='readFile()'/>
<button id="snap" onclick='myChange()'>轉換字符</button>
<canvas id="canvas" width="150px" height="200px"></canvas>
<script>
const i = 10
function readFile(){
var file = document.getElementById('photoimg').files[0]
var reader = new FileReader()
reader.readAsDataURL(file)//轉化成base64數據類型
reader.onload = function(e){
drawToCanvas(this.result)
}
}
let base = '#8XOHLTI)i=+;:,. '
function drawToCanvas(imgData){
console.log(imgData)
let canvas = document.getElementById("canvas")
var ctx = canvas.getContext('2d')
var img = new Image
img.src = imgData
img.onload = function(){//必須onload以後再畫
ctx.drawImage(img,0,0,150,200)
strDataURI = canvas.toDataURL()//獲取canvas base64數據
}
}
function myChange(){
let canvas = document.getElementById("canvas")
let ctx = canvas.getContext('2d')
let imgData = ctx.getImageData(0, 0, 150, 200)
JIENIGUI(imgData.data)
}
function JIENIGUI(data){
let a = ''
let j = 0
for(let i=0;i<data.length;i=i+4){
let num = parseInt((0.2126 * data[i] + 0.7152 * data[i+1] + 0.0722 * data[i+2])/256*base.length)
a = a + base[num]
j = j + 1
if(j==150) {
a = a + '\n'
i = i + 600
j = 0
}
}
console.log(a)
}
</script>
</body>
</html>複製代碼