HTML5 ASCII рдЖрд░реНрдЯ рдЬреЗрдирд░реЗрдЯрд░

рдЕрдЪреНрдЫрд╛ рджрд┐рди, рдкреНрд░рд┐рдп рд╣рдмреНрд░реЛрдЬрд╝рд┐рдЯреЗрд▓ред

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП HTML5 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдБрдЧрд╛ рдЬреЛ рдирд┐рдпрдорд┐рдд рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ ASCII рдХрд▓рд╛ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ред рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЙрди рд▓реЛрдЧреЛрдВ рд╕реЗ рд╣реИ рдЬреЛ рдПрдЪрдЯреАрдПрдордПрд▓ 5 рдЬреИрд╕реА рдЕрджреНрднреБрдд рддрдХрдиреАрдХ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВред рдкреЗрд╢реЗрд╡рд░ рдЕрдкрдиреЗ рд▓рд┐рдП рдХреБрдЫ рдирдпрд╛ рдЦреЛрдЬрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВред

рд╢рд╛рдо рд╣реЛ рдЪреБрдХреА рдереА, рдХреБрдЫ рдХрд░рдиреЗ рдХреЛ рдирд╣реАрдВ рдерд╛


рдореИрдВрдиреЗ рд╡реЙрд▓рдкреЗрдкрд░ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЦреЛрджрд╛ рдФрд░ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдЫрд╡рд┐ (1.1mb) рдХреЗ рдкрд╛рд░ рдЖрдпрд╛ред рдФрд░ рдореИрдВ рд░рдВрдЧреАрди рдЕрдХреНрд╖рд░реЛрдВ рдореЗрдВ рдЪрд┐рддреНрд░ рдмрдирд╛рдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рд╕реЗ "рдЭреБрдХрд╛" рдерд╛ред рдЗрдВрдЯрд░рдиреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдлрд╡рд╛рд╣ рдлреИрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЗрд╕реЗ ASCII- рдХрд▓рд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдкрд╣рд▓реЗ рд╕реЛрдЪрд╛: "рдФрд░ рдореИрдВ рдПрдХ рдЖрд╡реЗрджрди рднрд░ рджреВрдВрдЧрд╛ рдЬреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдореЗрд░реЗ рдкрд╕рдВрджреАрджрд╛ рд╡реЙрд▓рдкреЗрдкрд░ рдХреЛ рдЪрд┐рддреНрд░рд┐рдд рдХрд░реЗрдЧрд╛!"
рдЬрд▓реНрджреА рд╕реЗ рдирд╣реАрдВ рдХрд╣рд╛ред рд╕рдордп рд╣реИ, рдЗрдЪреНрдЫрд╛ рд╣реИ - рдХреНрдпреЛрдВ рди рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ред рдореИрдВрдиреЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдПрдЪрдЯреАрдПрдордПрд▓ 5 рдХреЛ рджреЗрдЦрд╛ рдФрд░ рдЕрдкрдиреЗ рд╣реЛрдВрдареЛрдВ рдХреЛ рдЪрд╛рдЯрд╛, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд╕рд╛рд░реЗ рд╣рд╛рде рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдкрд╣реБрдВрдЪреЗред рдФрд░ рдХреНрдпрд╛? рддрдХрдиреАрдХ рдлреИрд╢рдиреЗрдмрд▓ рд╣реИ, рдЖрд╢рд╛рдЬрдирдХ рд╣реИ, рдХреНрдпреЛрдВ рдирд╣реАрдВ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдПрдВ? рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдХреБрдЫ рдирдП рдХреЗ рдЕрдзреНрдпрдпрди рдХреЗ рд▓рд┐рдП - рдмрд╣реБрдд рдмрд╛рдд рд╣реИред рдЗрд╕ рдкрд░ рдФрд░ рд░реБрдХ рдЧрдпрд╛ред

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди


рдЖрд╡реЗрджрди рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдкреБрд░рд╛рдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХрд╛ рд╕рд╡рд╛рд▓ рд╣реА рдирд╣реАрдВ рдЙрдарддрд╛ред

рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, HTML рдорд╛рд░реНрдХрдЕрдк рдХреЛ рд╕реНрдХреЗрдЪ рдХрд░реЗрдВред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреЗрдЬ рдХреЛ рддреАрди рддрд╛рд░реНрдХрд┐рдХ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

1. рдореВрд▓ рдЫрд╡рд┐ рдХрд╛ рдХреНрд╖реЗрддреНрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ
<h2>Source image</h2> <div class="row"> <div class="source-image-area-out"> <!--     ( ) --> <div id="source-image-area"> Drop source image here... </div> </div> </div> <div class="row"> <!--     --> <label for="source-image-file" style="width: 150px">Or select this here:</label> <input type="file" id="source-image-file" /> </div> 


2. рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреНрд╖реЗрддреНрд░
 <h2>Settings</h2> <div class="left"> <!--   --> <div class="row"> <label for="input-used-text">Used text:</label> <input type="text" id="input-used-text" value="B" /> </div> <!--   --> <div class="row"> <label for="input-font-size">Font size:</label> <input type="number" id="input-font-size" min="3" max="20" step="1" value="8" style="width: 65px" /> px </div> </div> <div class="right"> <!--   --> <div class="row"> <label for="input-background-color">Background:</label> <input type="color" id="input-background-color" /> </div> <!--   --> <div class="row"> <label for="input-background-transparent">Transparent:</label> <input type="checkbox" id="input-background-transparent" /> </div> </div> 


3. рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХреНрд╖реЗрддреНрд░
 <h2>Previews</h2> <!--   --> <div id="preview-result" class="left"> <img src="" id="image-result" alt="" /> </div> <!--   --> <div id="preview-source" class="right"> <img src="" id="image-source" alt="" /> </div> 



рд╕реНрд░реЛрдд рдЫрд╡рд┐ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ


рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдЬрд╛рдиреЗрдВ рдХрд┐ рдореВрд▓ рдЫрд╡рд┐ рдХреЛ рдХреИрд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВред
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЪрдпрдирд┐рдд рдлрд╝рд╛рдЗрд▓ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рднреЗрдЬреЗ рдмрд┐рдирд╛, рд╕рд░реНрд╡рд░ FileReader рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреА readAsDataURL() рд╡рд┐рдзрд┐ рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдбреЗрдЯрд╛: URL рдпреЛрдЬрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реМрдЯрд╛рддреА рд╣реИред рддреЛ рдареАрдХ рд╣реИ, рдЪрд▓реЛ рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред

 //  ,      . var fileData = null; //      . var loadFromField = function(event) { loadFile(event.target.files[0]; }; //    тАЬ тАЭ. var loadFromArea = function(event) { event.stopPropagation(); event.preventDefault(); loadFile(event.dataTransfer.files[0]); }; //   dragover тАЬ тАЭ. var areaDragOverHandler = function(event) { event.stopPropagation(); event.preventDefault(); event.dataTransfer.dropEffect = "copy"; }; //   . //         fileData. var loadFile = function(file) { var reader = new FileReader(); reader.onload = function(data) { fileData = data.target.result; } reader.readAsDataURL(file); } //   . //     document.getElementById("source-image-file").addEventListener("change", loadFromField, false); //  тАЬ тАЭ. document.getElementById("source-image-area").addEventListener("drop", loadFromArea, false); document.getElementById("source-image-area").addeventListener("dragover", areaDragOverHandler, false); 

рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдбреЗрдЯрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдореВрд▓ рдЫрд╡рд┐ рд╣реИ: URLред рдЗрд╕рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдпрд╣ рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП src рд╡рд┐рд╢реЗрд╖рддрд╛ рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рддреЛ рдЪрд▓реЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдореВрд▓ рдЫрд╡рд┐ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВред
 var sourceImage = document.getElementById("mage-source"); sourceImage.src = fileData; 

рдЦреИрд░, рдпрд╣ рдЗрддрдирд╛ рд╕реНрдкрд╖реНрдЯ рд╣реИред рдЕрдм рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд: рдЖрдкрдХреЛ рдЗрд╕ рдЫрд╡рд┐ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╕реЗрдЯрд┐рдВрдЧреНрд╕


рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЙрдиреНрд╣реЗрдВ рдмрджрд▓рдиреЗ рдкрд░ рд╣рдо рд╣рд░ рдмрд╛рд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдирд╣реАрдВ рдмрдЪрд╛рдПрдВрдЧреЗред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдХреЗрд╡рд▓ рдЗрдореЗрдЬ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдмрд╛рд░ рдЧрд┐рдирддреЗ рд╣реИрдВред
 var usedText = document.getElementById("input-used-text").value; var fontSize = document.getElementById("input-font-size").value; var backgroundColor = (document.getElementById("input-background-transparent").checked == true) ? "rgba(0,0,0,0)" : document.getElementById("input.background-color").value; 

рдЕрдм рд╣рдо рдЕрдкрдиреА рдХрд▓рд╛ рдХреА рдкреАрдврд╝реА рдкрд░ рд╕реАрдзреЗ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред

рдЫрд╡рд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг


рдкреВрд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХрдИ рдЪрд░рдгреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
  1. рдореВрд▓ рдЫрд╡рд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рд╣рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд░рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ;
  2. рдХрд┐рд╕ рдХрд▓рд╛ рдХреЗ рд╕рд╛рде рд╡рд░реНрдгреЛрдВ рдХреЗ рдЖрдХрд╛рд░ рдХреА рдЧрдгрдирд╛;
  3. рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рддреАрдХ рдХреЗ рд░рдВрдЧ рдФрд░ рдЙрд╕рдХреЗ рд░рдВрдЧ рдХреА рдЧрдгрдирд╛;
  4. рдкреНрд░рддреНрдпрдХреНрд╖ рдХрд▓рд╛ рдкреАрдврд╝реА;
  5. рдПрдХ рдЫрд╡рд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд▓рд╛ рдХреА рдкреНрд░рд╕реНрддреБрддрд┐, рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдиреЗ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЗ рдлрд▓ рдХреЛ рдмрдЪрд╛ рд╕рдХреЗред


рд╕реНрд░реЛрдд рдЫрд╡рд┐ рдбреЗрдЯрд╛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реИ


рдореВрд▓ рдЫрд╡рд┐ рдХреЗ рдкрд┐рдХреНрд╕реЗрд▓ рд░рдВрдЧреЛрдВ рдХреЛ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдХреИрдирд╡рд╛рд╕ рдмрдирд╛рдиреЗ рдФрд░ рдЙрд╕ рдкрд░ рдЫрд╡рд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдкреГрд╖реНрда рдореЗрдВ рдХреИрдирд╡рд╛рд╕ рдЬреЛрдбрд╝реЗрдВ:
 <canvas id="canvas"></canvas> 

рдЕрдм рдЗрд╕реЗ рдореВрд▓ рдЫрд╡рд┐ рдХреЗ рд╕рдорд╛рди рдЖрдпрд╛рдо рджреЗрдВ рдФрд░ рдЗрд╕ рдЫрд╡рд┐ рдХреЛ рдЙрд╕ рдкрд░ рд▓рд╛рдЧреВ рдХрд░реЗрдВред рдФрд░ рдлрд┐рд░ рд╣рдореЗрдВ рдХреИрдирд╡рд╛рд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓рддреА рд╣реИ, рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк - рдореВрд▓ рдЫрд╡рд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред
 var canvas = document.getElementById("canvas"); var context = canvas.getContext("2d"); canvas.width = sourceImage.width; canvas.height = sourceImage.height; context.drawImage(sourceImage, 0, 0); var sourseData = context.getImageData(0, 0, canvas.width, canvas.height).data; 

getImageData() рд╡рд┐рдзрд┐ рдХреИрдирд╡рд╛рд╕ рдЬрд╛рдирдХрд╛рд░реА рд▓реМрдЯрд╛рддреА рд╣реИред рдбреЗрдЯрд╛ рдлрд╝реАрд▓реНрдб рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХрд╛ рд╡рд░реНрдгрди рд╣реЛрддрд╛ рд╣реИ, рдмрд╕ рд╣рдореЗрдВ рдЬреЛ рдЪрд╛рд╣рд┐рдПред

рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рд╣реИред рдмрд╕ рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдПрдХ рдЖрдпрд╛рдореА рдЖрдпрд╛рдо рд╣реИ, рдЬрд╣рд╛рдВ рдкрд╣рд▓реЗ рдЪрд╛рд░ рддрддреНрд╡ рдкрд╣рд▓реЗ рдкрд┐рдХреНрд╕реЗрд▓ (рдЖрд░рдЬреАрдмреАрдП) рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ, рдкрд╛рдВрдЪрд╡рд╛рдВ рдЖрдард╡реЗрдВ рддрддреНрд╡реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреВрд╕рд░рд╛ рдкрд┐рдХреНрд╕реЗрд▓ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рдЖрджрд┐ред рдЕрдВрдд рддрдХред рдЗрд╕рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ, рдореБрдЭреЗ рдмрд╣реБрдд рдХрдо рдкрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдЗрд╕ рд╕рдореВрд╣ рдХреЛ рдорд╛рдирд╡реАрдп рд░реВрдк рдореЗрдВ рд▓рд╛рддреЗ рд╣реИрдВред
 var getPixelsGrid = function(source) { var res = []; for (var i = 0; i < source.length; i += 4) { var y = Math.floor(i / (canvas.width * 4)); var x = (i - (y * canvas.height * 4)) / 4; if (typeof res[x] === "undefined") { res[x] = []; } res[x][y] = { r: source+0], g: source[i+1], b: source[i+2], a: source[i+3] } } return res; } var pixelsGrid = getPixelsGrid(sourseData); 

рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рджреЛ-рдЖрдпрд╛рдореА рд╕рд░рдгреА рд╣реИ рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЛ рдПрдХ рд╡рд╕реНрддреБ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдо рдЙрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗред

рдЪрд░рд┐рддреНрд░ рдЖрдХрд╛рд░


рд╕рдЯреАрдХ рдЪрд░рд┐рддреНрд░ рдЖрдХрд╛рд░ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ? рдлрд╝реЙрдиреНрдЯ рдХрд╛ рдЖрдХрд╛рд░ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рд╡рд╣ рдХреНрд╖реЗрддреНрд░ рдЬреЛ рд╕реНрдХреНрд░реАрди рдкрд░ рдЪрд░рд┐рддреНрд░ рд╡реНрдпрд╛рдкреНрдд рд╣реИ? рдкрд░реЗрд╢рд╛рди рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдЗрд╕ рдкреНрд░рддреАрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрд╕реНрдерд╛рдпреА рд╕реНрдкреИрди рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдорд╛рдкреЗрдВред
 var countUsedTextSize = function(symbol, size) { var block = document.createElement("span"); block.innerHTML = symbol; block.style.fontSize = size + "px"; block.style.fontFamily = "Monospace"; document.body.appendChild(block); var re = [(block.offsetWidth, Math.floor(block.offsetHeight * 0.8)] document.body.removeChild(block); return re; }; //   ,    . var size = countUsedTextSize(usedText[0], fontSize); var usedTextWidth = size[0] var usedTextHeight[1]; 

рдПрдХ рдЪреМрдХрд╕ рдкрд╛рдардХ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреАрдХ рдХреА рд╕рднреА рдКрдВрдЪрд╛рдИ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ 80%ред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкрддреНрд░ рдХрд╛ рджреГрд╢реНрдп рднрд╛рдЧ рдЙрд╕реЗ рдЖрд╡рдВрдЯрд┐рдд рдХреА рдЧрдИ рдкреВрд░реА рдКрдВрдЪрд╛рдИ рдкрд░ рдХрдмреНрдЬрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рдмреАрдЪ рдХреА рдЦрд╛рд▓реА рдХреНрд╖реИрддрд┐рдЬ рд░реЗрдЦрд╛рдПрдВ рдЕрдВрддрд┐рдо рдЫрд╡рд┐ рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИрдВред рдпрджрд┐ рдкрддреНрд░ рдмрдбрд╝реЗ рд╣реИрдВ рддреЛ рд╡реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВред рдореИрдВрдиреЗ рдЦреБрдж рдХреЛ рдЧреЛрд▓реА рдорд╛рд░ рд▓реА, рддрд╛рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдлрд╝реЙрдиреНрдЯ рдЖрдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рдмреАрдЪ рдХреА рджреВрд░реА рдХрдо рд╕реЗ рдХрдо рд╣реЛ - рдпрд╣ 80% рд╣реЛрдЧрд╛ред рддреЛ рдЗрд╕реЗ рдЫреЛрдбрд╝ рджреЗрдВред

рдкрд╛рддреНрд░реЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдФрд░ рд░рдВрдЧ рдХреА рдЧрдгрдирд╛


рдЕрдм рдЖрдкрдХреЛ "рдкреНрд░рддреАрдХ рдорд╛рдирдЪрд┐рддреНрд░" рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдПрдХ рд╕реВрдЪреА рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рддреАрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрдЧреА рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдЕрдВрддрд┐рдо рдЫрд╡рд┐ рдмрдирд╛рдИ рдЬрд╛рдПрдЧреАред рдЖрдкрдХреЛ рдкреНрд░рддреАрдХ рдФрд░ рдЙрд╕рдХреЗ рд░рдВрдЧ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ред

рдкреНрд░рддреАрдХ рдХреЗ рд░рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдЗрд╕ рдкреНрд░рддреАрдХ рджреНрд╡рд╛рд░рд╛ рд╡реНрдпрд╛рдкреНрдд рдореВрд▓ рдЫрд╡рд┐ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдХреЗрдВрджреНрд░ рдореЗрдВ рд╕реНрдерд┐рдд рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд░рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдпрд╛ рдЙрд╕рдХреЗ рдмрдЧрд▓ рдореЗрдВ, рдПрдХ рддрд░рдл рдПрдХ рд╡рд┐рд╖рдо рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкрд┐рдХреНрд╕реЗрд▓ рд╡рд╛рд▓реЗ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВред
 var getAvgPixelsList = function(grid) { var res = []; var stepX = usedTextWidth; var stepY = usedTextHeight; var countStepsX = canvas.width / stepX; var countStepsY = canvas.height / stepY; for (var y = 0; y < countStepsY; y++) { for (var x = 0; x < countStepsX; x++) { res.push({ x: x * stepX, y: y * stepY, r: grid[x * stepX][y * stepY].r, g: grid[x * stepX][y * stepY].g, b: grid[x * stepX][y * stepY].b, a: grid[x * stepX][y * stepY].a }); } } return res; }; var avgPixelsList = getAvgPixelsList(pixelsGrid); 

рд╣рдо рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдкрд╛рда рд╕реЗ рдЕрдЧрд▓реЗ рдЪрд░рд┐рддреНрд░ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдЧрд╛ред рдФрд░ рдЬрдм рдЕрдВрдд рддрдХ рдкрд╣реБрдВрдЪреЗрдВ, рддреЛ рд╢реБрд░реВ рдХрд░реЗрдВред
 var nextUsedChart = 0; var getNextUsedChart = function() { var re = usedText.substring(nextUsedChart, nextUsedChart+1); nextUsedChart++; if(nextUsedChart == str.length) { nextUsedChart = 0; } return re; }; 


рдХрд▓рд╛ рд╕реГрдЬрди


рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд╣ рд╕рдм рдХреБрдЫ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдП: рдкрд╛рддреНрд░реЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдФрд░ рд░рдВрдЧреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рд╣рдо рдЫрд╡рд┐ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдВрдЧреЗ рдЬреЛ рдЗрди рдкрд╛рддреНрд░реЛрдВ рдХреЛ рд▓реМрдЯрд╛рдПрдЧрд╛ред рдЪрд▓реЛ рд╣рдорд╛рд░реА рдХрд▓рд╛ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВред
 var getResultData = function(list) { //        . context.clearRect(0, 0, canvas.width, canvas.height); context.fillStyle = backgroundColor; context.fillRect(0, 0, canvas.width, canvas.height); //  . for (var i = 0; i < list.length; i++) { var px = list[i]; context.fillStyle = "rgba(" + px.r +", " + px.g + ", " + px.b + ", " + px.a + ")"; context.font = fontSize + "px Monospace"; context.fillText(getNextUsedChart(), px.x, px.y); } return canvas.toDataURL(); }; var resultData = getResultData(avgPixelsList); 

рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛! рд╣рдорд╛рд░реА рдХрд▓рд╛ рддреИрдпрд╛рд░ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред
 var resultImage = document.getElementById("image-result"); resultimage.src = resultData; 


рдкрд░рд┐рдгрд╛рдо


рдмрдзрд╛рдИ рд╣реЛ, рд╣рдорд╛рд░рд╛ рдЬрдирд░реЗрдЯрд░ рддреИрдпрд╛рд░ рд╣реИ! рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдпрд╣рд╛рдБ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ:
~ 150Kb



~ 750 рдХреЗрдмреА

рдЫрд╡рд┐

рд▓реЗрдХрд┐рди рдкрд╛рд░рджрд░реНрд╢реА рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рд╕рд╛рде ~ 300 рдХреЗрдмреА




рдпрд╣рд╛рдВ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рдХреНрдпрд╛ рдорд┐рд▓рд╛ред
рдФрд░ рдпрд╣рд╛рдБ рд╕реНрд░реЛрдд рдХреЛрдб рд╣реИрдВред рд╡реЗ рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдЙрди рд▓реЛрдЧреЛрдВ рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реИрдВ (рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИ), рд▓реЗрдХрд┐рди рдХрд╛рдо рдХрд╛ рддрд░реНрдХ рд╕рдорд╛рди рд╣реИред

рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдмрд┐рдВрджреБ рд╣реИрдВ:


рдирд┐рд╖реНрдХрд░реНрд╖


рдЖрдЬ рд╣рдо HTML5 рдХреЗ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдФрд░ рдЙрдкрдпреЛрдЧреА рдкрд╣рд▓реБрдУрдВ рд╕реЗ рдорд┐рд▓реЗ, рдЬреИрд╕реЗ рдХрд┐ рдХреИрдирд╡рд╛рд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдФрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ред рдЙрд╕реА рд╕рдордп, рд╣рдордиреЗ рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд, рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд▓рд┐рдЦрд╛ред рдмреЗрд╢рдХ, рдпрд╣ рдЕрдВрдд рдирд╣реАрдВ рд╣реИред рдЖрд╡реЗрджрди рдХреЛ рдЕрдВрддрд┐рдо рд░реВрдк рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:

рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╛рдж рдореЗрдВ рд╣реЛрдЧрд╛ред рдпрд╣рд╛рдВ рдореИрдВ рдХреЗрд╡рд▓ рдХрд╛рдо рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред

рдпрд╣реАрдВ рдкрд░ рдореЗрд░рд╛ рдЕрдВрдд рд╣реЛрддрд╛ рд╣реИред рдЕрдВрдд рддрдХ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рд▓рд┐рдП рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рдкрд╛рдПрдВрдЧреЗред рдЖрдк рдХреЗ рд▓рд┐рдП рдХреЛрдб рдкрддрд▓рд╛ред

Source: https://habr.com/ru/post/In182782/


All Articles