HTML5 рдбреЗрд╕реНрдХрдЯреЙрдк рдХреЗ рдмрд┐рдирд╛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ

рд▓рдЧрднрдЧ рд╣рд░ рджрд┐рди рдореИрдВ рдЬреАрдореЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдпрджрд┐ рдЖрдк рд╕реНрдХреНрд░реАрди рдХрд╛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ ( www.take-a-screenshot.org ) рд▓реЗрддреЗ рд╣реИрдВ , рддреЛ рдмрд╕ Ctrl + V рджрдмрд╛рдХрд░, рдЗрд╕ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдХреЛ рд╕реАрдзреЗ рдЬреАрдореЗрд▓ рд╕рдВрджреЗрд╢ рдХреЗ рдкрд╛рда рдореЗрдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╣рд░ рдЬрдЧрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ IE рдХреЛ рдЫреЛрдбрд╝рдХрд░ред рдпрд╣ рдХреИрд╕реЗ рд╣реЛрддрд╛ рд╣реИ рдХреЗ рд╕рд╡рд╛рд▓ рдореЗрдВ рд░реВрдЪрд┐ рдЕрдЧрд▓реА рдкреЛрд╕реНрдЯ Stackoverflow рдкрд░ред HTML5 рдХреА рд╢рдХреНрддрд┐ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрдХрд░, рдХреНрд▓рд┐рдкрдмреЛрд░реНрдбрдбреИрдЯрд╛ рдиреЗ рдПрдХ рд╕рд░рд▓ рдкреЛрд░реНрдЯрд▓ рдмрдирд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛, рдЬрд╣рд╛рдВ рдХреЛрдИ рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рд╕реА рднреА рдбреЗрд╕реНрдХрдЯреЙрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреЙрдкреА рдХрд┐рдП рдмрд┐рдирд╛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИред


рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛ рд╕рдорд░реНрдерди


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

рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ


рдмрдлрд░ (рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ) рд╕реЗ рдПрдХ рдЫрд╡рд┐ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдкреЗрд╕реНрдЯ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
document.body.addEventListener("paste", function(e) { ... }); 


рд╣реИрдВрдбрд▓рд░ рд╣рдореЗрд╢рд╛ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдВрдбреЛ рдХреЗ рдХрд╛рд░реНрдп рдХреНрд╖реЗрддреНрд░ рдореЗрдВ "рдЗрдВрд╕рд░реНрдЯ" рдШрдЯрдирд╛ рд╣реЛрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Ctrl + V. рдЕрдЧрд▓рд╛ рджрдмрд╛рдХрд░, рдЖрдкрдХреЛ рдЙрд╕ рдХреЛрдб рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрдлрд░ рд╕реЗ рдЫрд╡рд┐ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХреЛрдб рдХреНрд░реЛрдо рдФрд░ рдУрдкреЗрд░рд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдлрд╛рдпрд░рдлреЙрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдмрд╛рдж рдореЗрдВ рд╕реБрд░рдХреНрд╖рд╛ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдбрдбреЙрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рддрд░реАрдХреЗ рдмрдВрдж рдХрд░ рджрд┐рдП рдЧрдП рд╣реИрдВред

рдХреНрд░реЛрдо, рдУрдкреЗрд░рд╛

 // e.clipboardData.items -         for (var i = 0; i < e.clipboardData.items.length; i++) { //    if (e.clipboardData.items[i].kind == "file" && e.clipboardData.items[i].type == "image/png") { //    Blob ( ) var imageFile = e.clipboardData.items[i].getAsFile(); var fileReader = new FileReader(); fileReader.onloadend = function(e) { //    this.result  Base64  loadImg(this.result); }; //  Blob  DataURL (Base64   ) fileReader.readAsDataURL(imageFile); e.preventDefault(); break; } } 


рдлрд╝рд╛рдпрд░реНрдлрд╝реЙрдХреНрд╕

FireFox рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдбрдбрд╛рдЯрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлрд╛рдЗрд▓ рдХреЛ рдкрдврд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдирд╣реАрдВ рд╣реИред рдЬрдм рдЪрд┐рдкрдХрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ DataURL рдХреЗ рд░реВрдк рдореЗрдВ src рдХреЗ рд╕рд╛рде рдПрдХ <img> рдЯреИрдЧ рдмрдирд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ "рдмреИрд╕рд╛рдЦреА" рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛:
 //   js,   Mozilla,   ,  (contenteditable) div  //    . if ($.browser.mozilla) { $(document.body).prepend('<div id="temp" contenteditable="true" style="height:1px;width:1px;color:#FFFFFF;"></div>'); $('#temp').focus(); } //   "" document.body.addEventListener("paste", function(e) { if ($.browser.mozilla) { //  Mozilla,      div // (   ,  FireFox  img   ) $('#temp').focus(); //   img (   2, 3, ..., N ) $('#temp img').remove(); //  FireFox   img  callback-     img -    setTimeout(function() { //   FireFox   img  temp div,     DataURL    loadImg($('#temp img').attr('src')); }, 1); return true; } }); 


рддрд╕реНрд╡реАрд░ рдХрд╣рд╛рдБ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ?


рдЖрдк рд╕рд░реНрд╡рд░ рдкрд░ рд╕реАрдзреЗ рдЪрд┐рддреНрд░ рдЕрдкрд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕реЗ POST DataURL рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХреИрдирд╡рд╛рд╕ рдкрд░ рдЕрдкрдиреА рд╕реНрдХреНрд░реАрди рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
 var canvas = document.getElementById('canvas'); var ctx = canvas.getContext('2d'); ... function loadImg(dataURL) { var imageObj = new Image(); imageObj.onload = function() { var width = this.width, height = this.height; canvas.width = width; canvas.height = height; ctx.drawImage(this, 0, 0, width, height); }; imageObj.src = dataURL; } 


рдХреИрдирд╡рд╛рд╕ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕рд░реНрд╡рд░ рдкрд░ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдк рдЗрд╕реЗ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рд░реЗрдЦрд╛рдВрдХрди, рдбреНрд░рд╛, рд╕рд░реНрдХрд▓, рдХрдЯ, рдЖрджрд┐ред

рд╕рд░реНрд╡рд░ рдкрд░ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ?


рд╕рд░реНрд╡рд░ рдХреЗ рдкрд╛рд╕ рдПрдХ POST рдирд┐рдпрдВрддреНрд░рдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдмреЗрд╕ 64 (DataURL) рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдирд┐рдХрд╛рдп рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдЫрд╡рд┐ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдбрд┐рдХреЛрдб рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП pngред рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдХрд┐рд╕реА рднреА рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛ рд╕реНрдкреНрд░рд┐рдВрдЧрдПрдорд╡реАрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ:
 @RequestMapping(value = "/upload", method = RequestMethod.POST) public @ResponseBody String save(@RequestBody String b64) { File file = null; FileOutputStream out = null; try { //  Output  out = new FileOutputStream("/opt/files/somename.png"); //  Base64       out.write(Base64.decodeBase64(StringUtils.replace(b64, "data:image/png;base64,", ""))); //   IOUtils.closeQuietly(out); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return file.getName(); } 


рдЪреМрдХрд╕ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ StringUtils.replace (b64, "data: image / png; base64,", "") рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдкреНрд░реЗрд╖рд┐рдд DataURL рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдорд╛рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ DataURL рдмрдирд╛рддреЗ рд╕рдордп, рдЗрд╕рдХреЗ рдкреНрд░рдХрд╛рд░ рдФрд░ рдкреНрд░рд╛рд░реВрдк рдХреЛ рдкрд╣рд▓реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдмреЗрд╕ 64 рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЖрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛: рдЫрд╡рд┐ / png, base64, iVBORw0KGgoAAAANSUhEUgAnVYAAAMAC ...

рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдЖрдк рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЖрдХрд╛рд░ рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдпрд╣ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЕрдзрд┐рдХрддрдо рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рддреЛ рдЗрд╕реЗ jpg рдореЗрдВ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░реЗрдВред

рдорд╛рдорд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ


рд╣рдо рдЕрдкрдиреЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рддреНрд╡рд░рд┐рдд рдФрд░ рдЖрд╕рд╛рди рддрд░реАрдХреЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рд░ рджрд┐рди рдЖрдкрдХреА рд╕реНрдХреНрд░реАрди рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдмрд╣реБрдд рдХрдо рдРрд╕реЗ рд╕рдорд╛рдзрд╛рди рд╣реИрдВ рдФрд░ рдЬреЛ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИрдВ рдпрд╛ рдХреЗрд╡рд▓ рдбреЗрд╕реНрдХрдЯреЙрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ:


рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╣рдо рдЕрдкрдиреЗ рдСрдирд▓рд╛рдЗрди рд╕рд▓рд╛рд╣рдХрд╛рд░ Cackle рдХреЛ рдпрд╣ рд╕рднреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рдкрд╛рд╕ рдПрдХ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд▓реЗрдиреЗ рдФрд░ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд▓рд╛рд╣рдХрд╛рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реАрдзреЗ рдЫрд╡рд┐ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реЛрдЧрд╛ред рдпрд╣ рдПрдХ рдЕрд░реНрде рдореЗрдВ, рд╕рд╣-рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рд╕рдВрдкреВрд░реНрдг рд╕реНрдХреНрд░реАрди (рдФрд░ рди рдХреЗрд╡рд▓ рдмреНрд░рд╛рдЙрдЬрд╝рд░) рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ, рд╡рд┐рдХрд╛рд╕ рд▓рд╛рдЧрдд рдХреЛ рдХрдо рдХрд░рдиреЗ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдЖрдкрдХреА рд╕реНрдХреНрд░реАрди рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирдИ рд╣реИ рдФрд░ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрддреА рд░рд╣реЗрдЧреА, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЖрдкрдХреА рдЖрд▓реЛрдЪрдирд╛ рдФрд░ рд╕реБрдЭрд╛рд╡реЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

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


All Articles