рдХрдиреНрд╡рд░реНрдЯ рд╡реАрдбрд┐рдпреЛ ... SVG рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП

рдРрд╕рд╛ рд╣реБрдЖ рдХрд┐ рд╕рджрд┐рдпреЛрдВ рд╕реЗ рдЬреЗрдПрд╕ рдХреЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдПрдиреАрдореЗрд╢рди рджрд┐рдЦрд╛рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдХреНрд░реЙрд╕-рдмреНрд░рд╛рдЙрдЬрд╝рд░ рддрд░реАрдХрд╛ рдПрдХ рдПрдирд┐рдореЗрдЯреЗрдб рдЬрд┐рдл рд╣реИред рдпрджрд┐ рдЗрд╕рдХрд╛ JPEG- рдЖрдзрд╛рд░рд┐рдд рдПрдирд╛рд▓реЙрдЧ рдерд╛ - рдФрд░ рдЗрдВрдЯрд░рдиреЗрдЯ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ... рдЖрдзреБрдирд┐рдХ рд╡рд┐рдХрд▓реНрдк, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП APNG - рд╣рд░ рдЬрдЧрд╣ рдФрд░ рдХреЗрд╡рд▓ рдХрдо рд╕рдВрдкреАрдбрд╝рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдкреНрд░рддреАрдХреНрд╖рд┐рдд <рд╡реАрдбрд┐рдпреЛ> рдЯреИрдЧ рдкреЗрдЯреЗрдВрдЯ рд╕реЗ рдЧреНрд░рд╕реНрдд рд╣реИред

рдореИрдВ рд╡реАрдбрд┐рдпреЛ рдХреЛ рдПрд╕рд╡реАрдЬреА рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдкрд░ рдЕрдкрдиреЗ рдЫреЛрдЯреЗ рдЕрдХрд╛рджрдорд┐рдХ рдкреНрд░рдпреЛрдЧ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ (рдЬреЛ рддрдм, рднрд╛рдЧреНрдп рдХреЗ рд╕рд╛рде, рдмрд╕ <img src = "">) тАЛтАЛрдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЕрдХрд╛рджрдорд┐рдХ - рдХреНрдпреЛрдВрдХрд┐ рдХреНрд░реЙрд╕-рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдВрдЧрддрддрд╛ рдХреА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣рд▓ рд╣реЛрдиреЗ рд╕реЗ рджреВрд░ рд╣реИрдВ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЕрдкрдиреЗ рд╡рд░реНрддрдорд╛рди рд╕реНрд╡рд░реВрдк рдореЗрдВ рдпрд╣ рд╢рд╛рдпрдж рд╣реА рдХрд╣реАрдВ рднреА рд▓рд╛рдЧреВ рд╣реЛред
рдПрд╕рд╡реАрдЬреА рди рдХреЗрд╡рд▓ рд╡реЗрдХреНрдЯрд░ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рд╣реИ, рдмрд▓реНрдХрд┐ рдЙрдЪреНрдЪ рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓реЗ рд╡реАрдбрд┐рдпреЛ рдХреЗ 3 рдпрд╛ 4 рдореАрдЯрд░ рднреА рд╣реИ ...

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

рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдХреЗ рдЦреБрд╢ рдорд╛рд▓рд┐рдХ рддреБрд░рдВрдд рдмреЙрдХреНрд╕ рдСрдлрд┐рд╕ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╡реАрдбрд┐рдпреЛ рджреЗрдЦ рд╕рдХрддреЗ рдереЗ, рд▓реЗрдХрд┐рди рдХреНрд░реЛрдо - рдЬрдм рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЖрдИрд╡реАрдЬреА рдЫрд╡рд┐ рдХреЛ <img src = ""> рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдореНрдмреЗрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рд▓реЗрдЦ рд╕реЗ рд╣рдЯрд╛рдпрд╛ рдЬрд╛рдирд╛ рдерд╛ред

рд▓реЗрдХрд┐рди рдЖрдк рдПрд╕рд╡реАрдЬреА рдХреЛ рдПрдХ рдЕрд▓рдЧ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ ред IE рдХреЛ рдПрдХ рдирдИ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдЦреЛрд▓рдиреЗ рдФрд░ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд SVG JS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдПрдХ рдЕрд▓рдЧ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдпрд╣ рд╡рд┐рдХрд▓реНрдк рд╕рднреА 3 рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╣реАрдВ рднреА рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд <img src = ""> ...) рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдЖрдХрд╛рд░ : рдПрд╕рд╡реАрдЬреА рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдпрд╣ рд╡реАрдбрд┐рдпреЛ 2.3 рдПрдордмреА рд▓реЗрддрд╛ рд╣реИ, рдПрдХ рд╡реЗрдм рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ GZIP рд╕рдВрдкреАрдбрд╝рди рдХреЗ рдмрд╛рдж - 1.56 рдПрдордмреА (рдмреЗрд╕ 64 рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╕реЗ рдкрд╣рд▓реЗ рдлрд╝рд╛рдЗрд▓ рдЖрдХрд╛рд░ рдореЗрдВ рджрдмрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред GIF рдкреНрд░рд╛рд░реВрдк рдореЗрдВ, рдПрдХ рд╣реА рд╡реАрдбрд┐рдпреЛ 24.1Mb рд▓реЗрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдмреЗрд╣рддрд░ рдЧреБрдгрд╡рддреНрддрд╛ рдХреЗ рд╕рд╛рде 15 рдЧреБрдирд╛ рдХрд╛ рд▓рд╛рднред

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреГрд╖реНрдЯрд┐рдХреЛрдг

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

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдХреБрдЫ рдирд╣реАрдВ рдЖрдПрдЧрд╛ ...

рдмреЗрд╕64 jpeg рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд░реНрдорд┐рдд
рдХрд╛рдлреА рд╕рдордп рд╕реЗ рд╡реЗ c64 рдФрд░ svg рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдЕрдВрджрд░ рдмреЗрд╕ 64-рдПрдиреНрдХреЛрдбреЗрдб рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ:
<image id="frame0" width="480" height="201" xlink:href="data:image/jpeg;base64,/9j//gAPTGF2YzU0Lj[...]"></image> 

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

рдПрд╕рд╡реАрдЬреА рдПрд╕рдПрдордЖрдИрдПрд▓
SMIL (рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реНрдб рдорд▓реНрдЯреАрдореАрдбрд┐рдпрд╛ рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди рд▓реИрдВрдЧреНрд╡реЗрдЬ) рд╣рдореЗрдВ SVG рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдХрдИ рдлрд╝реНрд░реЗрдореЛрдВ рдХреЗ рд╡рд╛рдВрдЫрд┐рдд рдПрдиреАрдореЗрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
 <svg version="1.1" baseProfile="tiny" id="svg-root" width="100%" height="100%" viewBox="0 0 480 360" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <image id='frame0' width="320" height="240" xlink:href="data:image/jpeg;base64,/9j//gAPTGF2YzU0Lj[...]" display='inline'> <set id="show1" attributeName="display" to="inline" begin="0s;show4.end" dur="1s" fill="freeze"/> <set id="hide1" attributeName="display" to="none" begin="show1.end" dur="0.01s" fill="freeze"/> </image> <image id='frame1' width="320" height="240" xlink:href="data:image/jpeg;base64,/9j//gAPTGF2YzU0Lj[...]" display='none'> <set id="show2" attributeName="display" to="inline" begin="show1.end" dur="1s" fill="freeze"/> <set id="hide2" attributeName="display" to="none" begin="show2.end" dur="0.01s" fill="freeze"/> </image> <image id='frame2' width="320" height="240" xlink:href="data:image/jpeg;base64,/9j//gAPTGF2YzU0Lj[...]" display='none'> <set id="show3" attributeName="display" to="inline" begin="show2.end" dur="1s" fill="freeze"/> <set id="hide3" attributeName="display" to="none" begin="show3.end" dur="0.01s" fill="freeze"/> </image> <image id='frame3' width="320" height="240" xlink:href="data:image/jpeg;base64,/9j//gAPTGF2YzU0Lj[...]" display='none'> <set id="show4" attributeName="display" to="inline" begin="show3.end" dur="1s" fill="freeze"/> <set id="hide4" attributeName="display" to="none" begin="show4.end" dur="0.01s" fill="freeze"/> </image> </svg> 

рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ IE рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рди рддреЛ 9 рдФрд░ рди рд╣реА 10) - рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ SMIL рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ ред рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ / рдХреНрд░реЛрдо рдореЗрдВ, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЕрд▓рдЧ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдФрд░ рдлрд╝рд╛рдпрд░реНрдлрд╝реЙрдХреНрд╕ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЖрдИрдПрдордЬреА рдЯреИрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рднреАред

IE рдХреЗ рд▓рд┐рдП SVG рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд
рддрд╕реНрд╡реАрд░ рдХреЗ рдЕрдВрджрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреА рдмрд╣реБрдд рдХреНрд╖рдорддрд╛ рдиреЗ рдореБрдЭреЗ рдХреБрдЫ рдкрд░реЗрд╢рд╛рди рдХрд┐рдпрд╛ред
рдлрд┐рд░ рднреА, рдРрд╕рд╛ рдЕрд╡рд╕рд░ рд╣реИ:
 <svg> [....] <script type="text/ecmascript"><![CDATA[ var svgDoc; var desiredFramesPerSecond=12; var msPerFrame = 1000/desiredFramesPerSecond; var numFrames = 4; var frameCt=0; svgDoc = document.getElementsByTagName("svg")[0]; setTimeout("AnimateEm()",msPerFrame); function AnimateEm(){ if (frameCt==0) startTime = new Date(); setTimeout("AnimateEm()",msPerFrame); svgDoc.getElementById('frame'+frameCt.toString()).style.display='none'; frameCt=(frameCt+1)%numFrames; svgDoc.getElementById('frame'+frameCt.toString()).style.display='inline'; } ]]></script> </svg> 

рдЬрдм рдПрдХ рдЕрд▓рдЧ рд╡рд┐рдВрдбреЛ рдореЗрдВ svg рдЦреЛрд▓рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕рднреА 3 рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдХрд░рддрд╛ рд╣реИ - рдХрд┐рд╕реА рдореЗрдВ рдирд╣реАрдВред рд╢рд╛рдпрдж рдЬреЗрдПрд╕ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдЗрд╕реЗ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ...

рд╣рдорд╛рд░реЗ рдПрд╕рд╡реАрдЬреА рд╡реАрдбрд┐рдпреЛ рдмрдирд╛рдПрдВ
1. рдЫрд╡рд┐рдпреЛрдВ рдореЗрдВ рдПрд╡реА-рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЖрдВрд╕реВ:
 ffmpeg -i "atari.avi" -r 12 -y -qscale 5 -vf scale=480:-1 -f image2 atari%%03d.jpg 

2. svg рдЬрдирд░реЗрдЯ рдХрд░реЗрдВ
 php -q convert.php >convert.svg 

 <svg version="1.1" baseProfile="tiny" id="svg-root" width="100%" height="100%" viewBox="0 0 480 201" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <? $numFrames = 217; $FPS = 12; for($i=0;$i<=$numFrames-1;$i++) { ?> <image id="frame<?=$i?>" width="480" height="201" xlink:href="data:image/jpeg;base64,<?=base64_encode(file_get_contents("atari".str_pad(($i+1),3,"0",STR_PAD_LEFT).".jpg"))?>" display="<?=($i==0)?"inline":"none"?>"> <set id="show<?=$i?>" attributeName="display" to="inline" begin="<?=($i==0?"0s;":"")?>show<?=($i+$numFrames-1)%$numFrames?>.end" dur="<?=1/$FPS?>s" fill="freeze"/> <set id="hide<?=$i?>" attributeName="display" to="none" begin="show<?=$i?>.end" dur="0.01s" fill="freeze"/> </image> <? } ?> </svg> 

рдЖрдк рдпрд╣рд╛рдВ рдкрд░реАрдХреНрд╖рдг рдЪрд┐рддреНрд░ рдФрд░ рдПрдХ рдкреАрдврд╝реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред

рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ Habr рдХреЗ рд╣рд▓реНрдХреЗ рджрд┐рдорд╛рдЧ svg- рд╡реАрдбрд┐рдпреЛ рдХреЗ рдХреНрд░реЙрд╕-рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдВрдЧрддрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╣рдо рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рдПрдирд┐рдореЗрдЯреЗрдб gifs рдХреЛ 90 рдХреЗ рджрд╢рдХ рдХреЗ рдмреБрд░реЗ рд╕рдкрдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рднреВрд▓ рд╕рдХрддреЗ рд╣реИрдВ ...

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


All Articles