首页 > 其他分享 >Svg转Jpg

Svg转Jpg

时间:2023-07-27 14:34:19浏览次数:31  
标签:IndexOf Svg Jpg else processText var line

Svg转Jpg

需求描述

在C#中将 Svg 转换成 Jpg 图片。

转出来的图片,存在部分文字偏移走开的现象。

通过找到相应位置,调整偏移,解决问题。

关键在于,匹配到 hanging、baseline、rotate 的关键字,修改偏移位置实现。

实现的代码


        public void svgToPng()
        {

            // 导出图件
            int picWidth = 300, picHeight = 200, dpi = 50;


            var svgFile = @".\output\svg.svg";

            var svgLine = File.ReadAllLines(svgFile);

            var svgContent = "";

            var keyHanging = "<text dominant-baseline=\"hanging\"";
            var keyRotate = "rotate(-90)";
            var keyBaseline = "<text dominant-baseline=\"baseline\"";


            for (var i = 0; i < svgLine.Count(); i++)
            {
                var line = svgLine[i];

                if (line.IndexOf(keyHanging) >= 0 )
                {
                    line = processText(line);
                }

                if (line.IndexOf(keyRotate) >= 0)
                {
                    line = processText(line);
                }

                if (line.IndexOf(keyBaseline) >= 0)
                {
                    line = processText(line);
                }


                svgContent += line;
            }









            var svg = SvgDocument.FromSvg<SvgDocument>(svgContent);

            // 导出到 jpg
            var jpgpath = @".\output\jpg2.jpg";


            int nNewWidth = picWidth * 4;
            int nNewHeight = picHeight * 4;

            Bitmap bitmapJpg = svg.Draw(nNewWidth, nNewHeight);
            bitmapJpg.Save(jpgpath, System.Drawing.Imaging.ImageFormat.Jpeg);

        }

        public string processText(string line)
        {
            var keyHanging = "<text dominant-baseline=\"hanging\"";
            var keyRotate = "rotate(-90)";
            var keyBaseline = "<text dominant-baseline=\"baseline\"";

            var pattern = @"translate\(([^\)]+)\)";
            var patternFontSize = @"font-size=""(\d+\.?\d*)""";
            var match = Regex.Matches(line, pattern);

            if (match.Count > 0)
            {
                var result = match[0].Value;
                var m = match[0];
                var groups = m.Groups;

                var beforeText = groups[1].ToString();

                string[] arrItem = beforeText.Split(new[] { ',' });
                var x = Convert.ToDouble(arrItem[0]);
                var y = Convert.ToDouble(arrItem[1]);

                var matchFontSize = Regex.Matches(line, patternFontSize);
                var fontSizeText = matchFontSize[0].Groups[1].Value;
                var fontSize = Convert.ToDouble(fontSizeText);

                if (line.IndexOf(keyRotate) >= 0)
                {
                    if (x < 50)
                    {
                        x += 15;
                    }
                    else
                    {
                        x -= 12;
                    }
                }
                else if (line.IndexOf(keyHanging) >= 0)
                {
                    if (fontSize > 10)
                    {
                        // 加上偏移
                        y += 12;
                    }
                    else
                    {
                        y += 6;
                    }
                }
                else if (line.IndexOf(keyBaseline) >= 0)
                {
                    y -= 10;
                }

                var afterText = x + "," + y;

                line = line.Replace(beforeText, afterText);
            }

            return line;
        }

标签:IndexOf,Svg,Jpg,else,processText,var,line
From: https://www.cnblogs.com/lvye1221/p/17584821.html

相关文章

  • Batik - HighCharts / hchartscn有用到它来将svg图形转换很各种图片格式
    发音:[bə'ti:k]中文解释:蜡染色法,蜡染印花布定义:Batik是使用svg格式图片来实现各种功能的应用程序以及Applet提供的一个基于java的工具包。作用:通过Batik,你可以在JAVA可以使用的地方操作SVG文档,您还可以在你的应用程序使用Batik模块来生成,处理和转码SVG图像。Batik很容......
  • java jpg转png透明背景
    Java实现JPG转PNG透明背景在图像处理中,JPG和PNG是两种常见的图片格式。JPG是无损压缩格式,适用于颜色较多的照片,而PNG是一种无损压缩格式,适用于需要保留透明背景的图片。有时候我们可能需要将JPG格式的图片转换为PNG格式,并且保留透明背景。本文将介绍如何使用Java代码实现JPG转PNG......
  • 输出svg图形,显示数据标签 python
    输出SVG图形,显示数据标签的PythonSVG(ScalableVectorGraphics)是一种基于XML的矢量图形标准,它使用XML格式描述二维图形和图形应用程序。在Python中,我们可以使用不同的库来生成SVG图形,并通过添加数据标签的方式向图形添加数据信息。本文将介绍如何使用Python生成SVG图形,并显示数据......
  • python将jpg文件旋转为正向怎么弄
    项目方案:Python将JPG文件旋转为正向简介在日常生活和工作中,我们经常遇到需要将图片进行旋转的情况。本项目旨在使用Python编程语言,通过调用现有的图像处理库,将JPG文件旋转为正向。方案步骤1:安装必要的库在开始之前,我们需要安装并导入以下两个Python库:!pipinstallPillowfro......
  • 鼠标移入svg改变svg的边框颜色
    1、将svg以字符串拿过来(注意:要将它自身的stroke去掉)constusedIconSvg=`<svgwidth="20.041748"height="20.041664"viewBox="0020.041720.0417"fill="none"xmlns="http://www.w3.org/2000/svg"xmlns:xlink="http://www......
  • linux:svg转png(rsvg-convert 2.50.7/ubuntu 21.10)
    一,直接用ImageMagick把svg转为png时有瑕疵1,例子:原图:转换命令:liuhongdi@lhdpc:/data/work/tmpimg$convertgo-logo-blue.svggo.png效果如下:转换完后图片不完整2,查看convert是否调用rsvg-convert确实调用了,但不确定为什么会出现此情况liuhongdi@lhdpc:/data/w......
  • OpenCV计算机视觉学习(14)——浅谈常见图像后缀(png, jpg, bmp)的区别(opencv读取语义分割m
    如果需要处理的原图及代码,请移步小编的GitHub地址传送门:请点击我如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 本来不想碎碎念,但是我已经在图像后缀上栽倒两次了。而且因为无意犯错,根本找不到问题。不论是在深度学习的语义分割中,还是在图......
  • 【Vue】Vue3+Vite 实现 SVG 组件自动加载 icons 目录下所有文件
    1.安装依赖插件vite-plugin-svg-iconsvite-plugin-svg-icons用于生成svg雪碧图。特点:1.预加载在项目运行时就生成所有图标,只需操作一次dom2.高性能内置缓存,仅当文件被修改时才会重新生成vite-plugin-svg-icons官方文档pnpmaddvite-plugin-svg-icons2.安装......
  • HTML------常见的几种图片格式(GIF、PNG、JPG)讲解
    (1)GIF格式GIF格式最突出的特点是支持动画同时GIF是一种无损的图像格式,即修改图片之后,图片质量没有损失。GIF支持透明效果但只能处理256中颜色。因此在网页制作中,GIF格式常用于Logo、小图标和其他色彩相对单一的图像。(2)PNG格式 PNG包括PNG-8和真色彩(PNG-24和PNG-32)。相......
  • svg clipPath的clipPathUnits和相对路径转换
    clipPathUnits属性用来指定<clipPath>元素内容的坐标系,有2种取值:clipPathUnits="userSpaceOnUse|objectBoundingBox"clipPathUnits="userSpaceOnUse|objectBoundingBox"userSpaceOnUse表示当前网页所使用的屏幕坐标系objectBoundingBox则把坐标空间的原点调整到被......