
рдЕрдЪреНрдЫрд╛ рджрд┐рди, рдкреНрд░рд┐рдп рд╣рдмреНрд░реЛрдЬрд╝рд┐рдЯреЗрд▓ред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП 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 рдпреЛрдЬрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реМрдЯрд╛рддреА рд╣реИред рддреЛ рдареАрдХ рд╣реИ, рдЪрд▓реЛ рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред
рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдбреЗрдЯрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдореВрд▓ рдЫрд╡рд┐ рд╣реИ: 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;
рдЕрдм рд╣рдо рдЕрдкрдиреА рдХрд▓рд╛ рдХреА рдкреАрдврд╝реА рдкрд░ рд╕реАрдзреЗ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред
рдЫрд╡рд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг
рдкреВрд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХрдИ рдЪрд░рдгреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
- рдореВрд▓ рдЫрд╡рд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рд╣рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд░рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ;
- рдХрд┐рд╕ рдХрд▓рд╛ рдХреЗ рд╕рд╛рде рд╡рд░реНрдгреЛрдВ рдХреЗ рдЖрдХрд╛рд░ рдХреА рдЧрдгрдирд╛;
- рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рддреАрдХ рдХреЗ рд░рдВрдЧ рдФрд░ рдЙрд╕рдХреЗ рд░рдВрдЧ рдХреА рдЧрдгрдирд╛;
- рдкреНрд░рддреНрдпрдХреНрд╖ рдХрд▓рд╛ рдкреАрдврд╝реА;
- рдПрдХ рдЫрд╡рд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд▓рд╛ рдХреА рдкреНрд░рд╕реНрддреБрддрд┐, рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдиреЗ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЗ рдлрд▓ рдХреЛ рдмрдЪрд╛ рд╕рдХреЗред
рд╕реНрд░реЛрдд рдЫрд╡рд┐ рдбреЗрдЯрд╛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реИ
рдореВрд▓ рдЫрд╡рд┐ рдХреЗ рдкрд┐рдХреНрд╕реЗрд▓ рд░рдВрдЧреЛрдВ рдХреЛ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ
рдХреИрдирд╡рд╛рд╕ рдмрдирд╛рдиреЗ рдФрд░ рдЙрд╕ рдкрд░ рдЫрд╡рд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдкреГрд╖реНрда рдореЗрдВ рдХреИрдирд╡рд╛рд╕ рдЬреЛрдбрд╝реЗрдВ:
<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; };

рдПрдХ рдЪреМрдХрд╕ рдкрд╛рдардХ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреАрдХ рдХреА рд╕рднреА рдКрдВрдЪрд╛рдИ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ 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) {
рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛! рд╣рдорд╛рд░реА рдХрд▓рд╛ рддреИрдпрд╛рд░ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред
var resultImage = document.getElementById("image-result"); resultimage.src = resultData;
рдкрд░рд┐рдгрд╛рдо
рдмрдзрд╛рдИ рд╣реЛ, рд╣рдорд╛рд░рд╛ рдЬрдирд░реЗрдЯрд░ рддреИрдпрд╛рд░ рд╣реИ! рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдпрд╣рд╛рдБ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ:
рд▓реЗрдХрд┐рди рдкрд╛рд░рджрд░реНрд╢реА рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рд╕рд╛рде ~ 300 рдХреЗрдмреА рдпрд╣рд╛рдВ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рдХреНрдпрд╛ рдорд┐рд▓рд╛ред
рдФрд░
рдпрд╣рд╛рдБ рд╕реНрд░реЛрдд рдХреЛрдб рд╣реИрдВред рд╡реЗ рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдЙрди рд▓реЛрдЧреЛрдВ рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реИрдВ (рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИ), рд▓реЗрдХрд┐рди рдХрд╛рдо рдХрд╛ рддрд░реНрдХ рд╕рдорд╛рди рд╣реИред
рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдмрд┐рдВрджреБ рд╣реИрдВ:
- рдХреНрд░реЛрдо рдореЗрдВ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрдиреНрдп рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдИ рдЧреБрдирд╛ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ;
- рдЬрдм рдПрдХ рдмрдбрд╝реА рдЫрд╡рд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг (1000x1000 рд╕реЗ рдЕрдзрд┐рдХ)ред "рдореЗрдореЛрд░реА рд╕реЗ рдмрд╛рд╣рд░" рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдЯреИрдм рдХреЛ рдорд╛рд░рддреЗ рд╣реБрдП, рдХреНрд░реЛрдо рдЗрд╕реЗ рдПрдХ рдирдИ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдЦреЛрд▓рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдЕрдиреНрдп рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ, рдпрд╣ рдзреАрд░реЗ-рдзреАрд░реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЬрдм рдХреЛрдИ рдЫрд╡рд┐ url рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЗрд╖рд┐рдд рд╣реЛрддреА рд╣реИ, рддреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдмрд╣реБрдд рд▓рдВрдмреА рд╣реЛрддреА рд╣реИ;
рдирд┐рд╖реНрдХрд░реНрд╖
рдЖрдЬ рд╣рдо HTML5 рдХреЗ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдФрд░ рдЙрдкрдпреЛрдЧреА рдкрд╣рд▓реБрдУрдВ рд╕реЗ рдорд┐рд▓реЗ, рдЬреИрд╕реЗ рдХрд┐ рдХреИрдирд╡рд╛рд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдФрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ред рдЙрд╕реА рд╕рдордп, рд╣рдордиреЗ рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд, рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд▓рд┐рдЦрд╛ред рдмреЗрд╢рдХ, рдпрд╣ рдЕрдВрдд рдирд╣реАрдВ рд╣реИред рдЖрд╡реЗрджрди рдХреЛ рдЕрдВрддрд┐рдо рд░реВрдк рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
- рдЕрдм, рдпрджрд┐ рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рдкреБрд░рд╛рдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд╕рд╛рде рд▓реЙрдЧ рдЗрди рдХрд░рддрд╛ рд╣реИ, рддреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд╣реЗрдЧрд╛, рдпрд╣ рд╕рд┐рд░реНрдл рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рддрдХрдиреАрдХреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░реАрдХреНрд╖рдг рдЬреЛрдбрд╝рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рдХреЗ рд╕рддреНрдпрд╛рдкрди рдХреЛ рдЬреЛрдбрд╝рдирд╛ рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ;
- рдпрджрд┐ рдореВрд▓ рдЫрд╡рд┐ рдХрд╛ рдЖрдХрд╛рд░ рдкреНрд░рддреАрдХ рдХреЗ рдЖрдХрд╛рд░ рдХрд╛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЦрд╛рд▓реА рдкрдЯреНрдЯрд┐рдпрд╛рдБ рдиреАрдЪреЗ рдФрд░ рджрд╛рдИрдВ рдУрд░ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИрдВред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
- рдЦреИрд░, рдХреНрд░реЙрд╕-рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдВрдЧрддрддрд╛ред рдореБрдЭреЗ рдХреЗрд╡рд▓ рдХреНрд░реЛрдорд┐рдпрдо 25, рдХреНрд░реЛрдо 27, рдлрд╛рдпрд░рдлреЙрдХреНрд╕ 21, рдУрдкреЗрд░рд╛ 12 рдФрд░ рдЖрдИрдлреЛрди рдкрд░ рд╕рдлрд╛рд░реА (рдореБрдЭреЗ рд╕рдВрд╕реНрдХрд░рдг рдирд╣реАрдВ рдорд┐рд▓рд╛) рдореЗрдВ рдЬрд╛рдВрдЪрдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдорд┐рд▓рд╛ред рдЕрдиреНрдп рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ, рдЖрдкрдХреЛ рдмрдЧреНрд╕ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╛рдж рдореЗрдВ рд╣реЛрдЧрд╛ред рдпрд╣рд╛рдВ рдореИрдВ рдХреЗрд╡рд▓ рдХрд╛рдо рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред
рдпрд╣реАрдВ рдкрд░ рдореЗрд░рд╛ рдЕрдВрдд рд╣реЛрддрд╛ рд╣реИред рдЕрдВрдд рддрдХ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рд▓рд┐рдП рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рдкрд╛рдПрдВрдЧреЗред рдЖрдк рдХреЗ рд▓рд┐рдП рдХреЛрдб рдкрддрд▓рд╛ред