SVG: draw text on a image
<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,user-scalable=no"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>geovindu</title> <meta name="Description" content="geovindu"/> <meta name="Keywords" content="geovindu"/> <meta name="author" content="geovindu"/> <script src="js/jquery-3.6.0.js"></script> <script src="ajax/libs/modernizr/2.8.3/modernizr.min.js" type="text/javascript"></script> <link rel='stylesheet' href='bootstrap/4.6.2/css/bootstrap.min.css'> <link rel="stylesheet" href="css/main.css"> </head> <body> <div class="container"> <h1>Non-Scaling SVG</h1> <svg class="defs-only" xmlns="http://www.w3.org/2000/svg"> <linearGradient id="coin" x2="50%" y2="40%" spreadMethod="reflect"> <stop stop-color="gold" offset="30%" /> <stop stop-color="goldenrod" offset="70%" /> <stop stop-color="white" offset="82%" /> <stop stop-color="gold" offset="92%" /> <stop stop-color="darkgoldenrod" offset="100%" /> </linearGradient> <radialGradient id="pot" fx="30%" fy="35%"> <stop stop-color="white" offset="0%" /> <stop stop-color="gold" offset="15%" /> <stop stop-color="goldenrod" offset="80%" /> <stop stop-color="darkgoldenrod" offset="100%" /> </radialGradient> <symbol id="potofgold" > <g fill="url(#coin)" stroke="darkgoldenrod" stroke-width="0.5"> <circle r="5" transform="translate(30,7)" /> <circle r="5" transform="translate(35,13)" /> <circle r="5" transform="translate(22,10)" /> <circle r="5" transform="translate(27,9)" /> <circle r="5" transform="translate(18,17)" /> <circle r="5" transform="translate(42,18)" /> <circle r="5" transform="translate(32,19)" /> <circle r="5" transform="translate(30,14)" /> <circle r="5" transform="translate(25,15)" /> <circle r="5" transform="translate(37,19)" /> <circle r="5" transform="translate(31,16)" /> <circle r="5" transform="translate(20,18)" /> <circle r="5" transform="translate(26,21)" /> </g> <path fill="url(#pot)" stroke="#751" stroke-width="0.5" d="M30,50 C45,50 55,45 55,35 Q 55,27 50,25 C55,22 53,15 45,20 S 23,25 15,20 S5,22 10,25 Q 5,27 5,35 C5,45 15,50 30,50Z" /> </symbol> </svg> <figure> <figcaption>50x25</figcaption> <div> <svg width="50" height="25"> <use xlink:href="#potofgold"/> </svg> </div> </figure> <figure> <figcaption>100x50</figcaption> <div> <svg width="100" height="50"> <use xlink:href="#potofgold"/> </svg> </div> </figure> <figure> <figcaption>200x100</figcaption> <div> <svg width="200" height="100"> <use xlink:href="#potofgold"/> </svg> </div> </figure> <figure> <figcaption>200x50</figcaption> <div> <svg width="200" height="50"> <use xlink:href="#potofgold"/> </svg> </div> </figure> <figure> <figcaption>50x50</figcaption> <div> <svg width="60" height="50"> <use xlink:href="#potofgold"/> </svg> </div> </figure> <figure> <figcaption>Default Size</figcaption> <div> <svg> <use xlink:href="#potofgold"/> </svg> </div> </figure> </div> <div class="Charting" id="MetricContainer" width="500" height="500" style="height:100%;width:100%;"> <svg height="100%" width="100%" viewBox="0 0 500 525"> <g> <image x="20" y="20" xlink:href="./pc/1.png"> <text x="10" y="20" transform="rotate(25 40,50)" fill="red">Rotated SVG text</text> <text x="10" y="150" transform="rotate(55 40,50)" fill="#000000">2022-11-20</text> <text x="20" y="40" transform="rotate(30 20,40)" style="stroke:none; fill:#000000;" >Rotated SVG text</text> </g> </svg></div> <svg xmlns="http://www.w3.org/2000/svg"> <text x="10" y="20" style="writing-mode: tb;"> Vertical </text> </svg> <img src="flower.svg" class="fa-square-full"/> <svg xmlns="http://www.w3.org/2000/svg"> <text x="10" y="20" style="writing-mode: tb;"> 垂直文字 </text> </svg> <svg xmlns="http://www.w3.org/2000/svg"> <text x="20" y="40" transform="rotate(30 20,40)" style="stroke:none; fill:#000000;" >Rotated SVG text</text> </svg> <div class="container"> <svg width="100%" height="800" version="1.1" xmlns="http://www.w3.org/2000/svg"> <image x="20" y="20" xlink:href="./pc/1.png" /> <text id="txt" x="180" y="770" transform="rotate(5 180,250)" style="fill:#000;">geovindu,革命尚未成功,努力仍将继续!</text> </svg> </div> <div class="container"> <svg width="100%" height="800" version="1.1" xmlns="http://www.w3.org/2000/svg"> <image x="20" y="20" xlink:href="./pc/2.png" /> <text id="txt" x="210" y="750" transform="rotate(3 180,250)" style="fill:#000;">geovindu,革命尚未成功,努力仍将继续!</text> </svg> </div> <div class="container"> <svg width="100%" height="800" version="1.1" xmlns="http://www.w3.org/2000/svg"> <image x="20" y="20" xlink:href="./pc/4.png" /> <text id="txt" x="210" y="760" transform="rotate(-13 180,250)" style="fill:#000;">geovindu,革命尚未成功,努力仍将继续!</text> </svg> </div> <div class="container"> <svg width="100%" height="800" version="1.1" xmlns="http://www.w3.org/2000/svg"> <image x="20" y="20" xlink:href="./pc/5.png" /> <text id="txt" x="180" y="740" transform="rotate(-4 180,250)" style="fill:#000;">geovindu,革命尚未成功,努力仍将继续!</text> </svg> </div> <div class="container"> <svg width="100%" height="800" version="1.1" xmlns="http://www.w3.org/2000/svg"> <image x="20" y="20" xlink:href="./pc/6.png" /> <text id="txt" x="180" y="730" transform="rotate(-1 180,250)" style="fill:#000;">geovindu,革命尚未成功,努力仍将继续!</text> </svg> </div> </body> </html>
<?xml version="1.0" standalone="no"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg width="150" height="200" viewBox="0 0 150 200" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>Flower SVG File</title> <defs> <g id="petal"> <path d="M 10 0 Q 27 -15 40 0 27 15 10 0" /> </g> </defs> <filter id="glow"> <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0.9 0 0 0 0 0.9 0 0 0 0 0 1 0"></feColorMatrix> <feGaussianBlur stdDeviation="2.5" result="coloredBlur"></feGaussianBlur> <feMerge> <feMergeNode in="coloredBlur"></feMergeNode> <feMergeNode in="SourceGraphic"></feMergeNode> </feMerge> </filter> <g id="flower"> <path d="M 50 50 Q 40 70, 70 100 T 70 150" style="stroke: green; fill: none; stroke-width: 3;"/> <path d="M 70 100 Q 80 70, 120 80, 90 75, 75 105" style="stroke: none; fill: green;"/> <circle cx="40" cy="50" r="10" style="fill: gray;"/> <g style="stroke: black; fill: yellow;"> <use xlink:href="#petal" transform="translate(40,50)"/> <use xlink:href="#petal" transform="translate(40,50) rotate(40)"/> <use xlink:href="#petal" transform="translate(40,50) rotate(80)"/> <use xlink:href="#petal" transform="translate(40,50) rotate(120)"/> <use xlink:href="#petal" transform="translate(40,50) rotate(160)"/> <use xlink:href="#petal" transform="translate(40,50) rotate(200)"/> <use xlink:href="#petal" transform="translate(40,50) rotate(240)"/> <use xlink:href="#petal" transform="translate(40,50) rotate(280)"/> <use xlink:href="#petal" transform="translate(40,50) rotate(320)"/> </g> </g> <text x="90" y="50" style="filter: url(#glow)fill:#003333; font-size: 18;">Sping<tspan x="90" y="70">Flower</tspan></text> </svg>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"> <svg width="400" height="250" viewBox="0 0 400 250" onload="init(evt)" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <script type="text/ecmascript"><![CDATA[ var scaleChoice = 1; var scaleFactor = [1.25, 1.5, 1.75]; var slideChoice = -1; var rgb = [100, 100, 100]; function init(evt) { var obj; for (var i = 0; i < 3; i++) { obj = document.getElementById("scale" + i); obj.addEventListener("click", clickButton, false); obj = document.getElementById("sliderGroup" + i); obj.addEventListener("mousedown", startColorDrag, false); obj.addEventListener("mousemove", doColorDrag, false); obj.addEventListener("mouseup", endColorDrag, false); } document.getElementById("eventCatcher"). addEventListener("mouseup", endColorDrag, false); if (parent) { parent.setShirtColor = svgSetShirtColor; } transformShirt(); } function clickButton(evt) { var choice = evt.target.parentNode var name = choice.getAttribute("id"); var old = document.getElementById("scale" + scaleChoice); old.removeAttribute("class"); choice.setAttribute("class", "selected"); scaleChoice = parseInt(name[name.length - 1]); transformShirt(); } function transformShirt() { var factor = scaleFactor[scaleChoice]; var obj = document.getElementById("shirt"); obj.setAttribute("transform", "translate(150, 150) " + "scale(" + factor + ")"); obj.setAttribute("stroke-width", 1 / factor); } /* * Stop dragging the current slider (if any) * and set the current slider to the one specified. * (0 = red, 1 = green, 2 = blue) */ function startColorDrag(evt) { var sliderId = evt.target.parentNode.getAttribute("id"); endColorDrag( evt ); slideChoice = parseInt(sliderId[sliderId.length - 1]); } /* * Set slider choice to -1, indicating that no * slider is begin dragged. No access to the event * is needed for this function. */ function endColorDrag( ) { /* * If a slider was being moved, send the slider number * and its value back to the updateHTMLField function * in the parent web browser window. */ if (slideChoice >= 0) { if (parent) { parent.updateHTMLField(slideChoice, rgb[slideChoice]); } } // In any case, nobody's being dragged now slideChoice = -1; } function svgSetShirtColor(which, percent) { var obj; var colorStr; var newText; if (percent < 0) { percent = 0; } if (percent > 100) { percent = 100; } obj = document.getElementById("slide" + which); obj.setAttribute("y1", 100 - percent); obj.setAttribute("y2", 100 - percent); rgb[which] = percent; colorStr = "rgb(" + rgb[0] + "%," + rgb[1] + "%," + rgb[2] + "%)"; obj = document.getElementById("shirt"); obj.style.setProperty("fill", colorStr, null); } function doColorDrag(evt) { if (slideChoice >= 0) { var sliderId = evt.target.parentNode.getAttribute("id"); chosen = parseInt(sliderId[sliderId.length - 1]); if (slideChoice == chosen) { svgSetShirtColor(slideChoice, 100 - (evt.clientY - 10)); } } } ]]></script> <style type="text/css" > <![CDATA[ svg { /* default values */ stroke: black; fill: white; } g.selected rect { fill: #ffc; /* light yellow */ } text { stroke: none; fill:black; text-anchor: middle; } g.slider rect { stroke: none; /* default white fill still applies */ } line.slider { stroke: gray; stroke-width: 2; } ]]></style> <path id="shirt-outline" d="M -6 -30 -32 -19 -25.5 -13 -22 -14 -22 30 23 30 23 -14 26.5 -13 33 -19 7 -30 A 6.5 6 0 0 1 -6 -30"/> </defs> <rect id="eventCatcher" x="0" y="0" width="400" height="300" style="fill: none; stroke:none;" pointer-events="visible" /> <g id="shirt" > <use xlink:href="#shirt-outline" x="0" y="0"/> </g> <g id="scale0" > <rect x="100" y="10" width="30" height="30" /> <text x="115" y="30">S</text> </g> <g id="scale1" class="selected"> <rect x="140" y="10" width="30" height="30" /> <text x="155" y="30">M</text> </g> <g id="scale2" > <rect x="180" y="10" width="30" height="30" /> <text x="195" y="30">L</text> </g> <g id="sliderGroup0" transform="translate( 230, 10 )"> <rect x="-10" y="-5" width="40" height="110"/> <rect x="5" y="0" width="10" height="100" style="fill: red;"/> <line id="slide0" class="slider" x1="0" y1="0" x2="20" y2="0" /> </g> <g id="sliderGroup1" transform="translate( 280, 10 )"> <rect x="-10" y="-5" width="40" height="110"/> <rect x="5" y="0" width="10" height="100" style="fill: green;"/> <line id="slide1" class="slider" x1="0" y1="0" x2="20" y2="0" /> </g> <g id="sliderGroup2" transform="translate( 330, 10 )"> <rect x="-10" y="-5" width="40" height="110"/> <rect x="5" y="0" width="10" height="100" style="fill: blue;"/> <line id="slide2" class="slider" x1="0" y1="0" x2="20" y2="0" /> </g> </svg>
https://github.com/heathcliff/css3-mediaqueries-js
https://github.com/GestiXi/image-scale
https://github.com/sdras/svg-workshop
https://github.com/oreillymedia/svg-essentials-examples
哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)