我们使用rsvg-convert进行SVG到PDF的转换,它就像魅力一样,直到我们遇到文本.
这是一个例子 -
命令:rsvg-convert -w 842 -f pdf -o testing.pdf testing.svg
这是SVG:http://pdf-balancer-693758372.us-east-1.elb.amazonaws.com/development/assets/img/uploads/testing.svg
这是PDF:http://pdf-balancer-693758372.us-east-1.elb.amazonaws.com/development/assets/img/uploads/testing.pdf
转换后的PDF中存在明显的问题:
下划线丢失了
某些文本定位不正确(比较SVG和PDF中非粗体文本的最后一个字符正下方的粗体文本中的相应字符)
这个电子邮件中的示例很好,但对于某些字体,粗体标记会丢失
.
救命!
我一直在尝试将来自https://betacssjs.chesscomfiles.com/bundles/web/favicons/safari-pinned-tab.f387b3f2.svg的图像放入Tkinter框架。我从这里的帖子中发现,在rsvg和cairo的帮助下,这是可能的。
我使用python 3.6在Windows 10,我RSVG从这里和开罗这里,然后提取该文件夹复制到“C:\用户\ site_packages”文件夹。他们进口罚款,但我不知道如何使用它们。我尝试使用代码:
import tkinter as tk
main=tk.Tk()
frame=tk.Frame(main)
def svgPhotoImage(self,file_path_name):
from PIL import Image,ImageTk
import rsvg,cairo
svg = rsvg.Handle(file=file_path_name)
width, height = svg.get_dimension_data()[:2]
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, int(width), int(height))
context = cairo.Context(surface)
#context.set_antialias(cairo.ANTIALIAS_SUBPIXEL)
svg.render_cairo(context)
tk_image=ImageTk.PhotoImage('RGBA')
image=Image.frombuffer('RGBA',(width,height),surface.get_data(),'raw','BGRA',0,1)
tk_image.paste(image)
return(tk_image)
tk_image=self.svgPhotoImage(filename)
frame.configure(image=tk_image)
Run Code Online (Sandbox Code Playgroud)
和
#rsvg.py
import os
try:
import rsvg
WINDOWS=False
except ImportError:
print"Warning, could not import 'rsvg'"
if os.name == 'nt':
print "Detected windows, creating rsvg."
#some workarounds for windows
from ctypes …Run Code Online (Sandbox Code Playgroud) 我正在使用ImageMagick的convert实用程序将SVG文件转换为PNG图像.起初,我在OSX(brew install imagemagick)上使用IM的vanilla安装来转换SVG:
$ convert file.svg file.png
Run Code Online (Sandbox Code Playgroud)
除了该文件中的某些图像对象是偏移的(实际链接到图像)之外,这个工作正常.然后我读了一个相关的问题,建议使用rsvg支持编译ImageMagick (自制软件用它brew install imagemagick --use-rsvg).
现在,当我尝试执行转换时,不会渲染任何图像.我尝试使用此SVG文件,生成的PNG为空.但是,如果SVG上存在任何文本,则会将其呈现在正确的位置.任何想法如何进行?谢谢.
我有一个大的SVG文件(大约60 MB,10000x10000像素但有可能变大),我想要创建许多平铺的256x256 PNG图像(在这个例子中会有1600个图像) ;圆形(10000/256)^ 2).
有没有人知道如何在Web服务器上执行此操作(运行PHP等)?我想过rsvg,但它似乎没有任何功能来修改边界框(我宁愿避免为每个部分手动操作).ImageMagick也许可以做到,但我没有太多运气让它运转起来.使用rsvg创建一个大的PNG,然后使用专用于拼贴非常大的图像的工具可能会有效,但我没有运气找到这样的东西!速度并不是一个真正的问题,虽然它是可取的,所以如果最坏的情况发生,我可能会考虑修改SVG的每个部分的边界框.不过,我可以看到这一代人永远在走!
有谁知道这样做的任何方法?
编辑2016-03-02:
我最近再次回到需要这个问题的答案,并且Inkscape似乎是唯一能够以给定大小呈现特定区域的SVG的工具(svgexport几乎满足这些要求,但它不允许您更改宽高比) .
我的目标是将SVG平铺到256x256磁贴中,现在我已经成功制作了一个脚本,可以通过重复渲染inkscape大约16,000 x 16,000并平铺生成的图像来平铺任意大的SVG .我已成功渲染尺寸超过500,000 x 500,000像素的SVG - 内存使用没有问题(这需要很长时间!)
我正在寻找使用python库rsvg将SVG图形转换为其他格式(主要是PDF),并且似乎无法在任何地方找到在Mac OSX上下载和安装的python-librsvg源代码.有帮助吗?
我试图在Python 3.2中使用rsvg,但我一直收到导入错误.我已经安装了所有librsvg软件包和cairo.我无法在网上找到任何其他安装工具来实现它.我听说自2005年以来rsvg模块还没有更新,所以它只是与Python 3.2不兼容,还是我还可以尝试安装它?或者,如果rsvg不起作用,是否有人对通过Python显示SVG文件的简单方法有任何建议(基本上只显示图像)?
编辑:我得到的错误是:'ImportError:没有名为rsvg的模块'
python2中不显示此错误
提前致谢
我用这段代码转换svg成png图像
<?php
exec('/usr/bin/rsvg-convert -w 1000 -h 1000 tshirt.svg -o tshirt.png');
?>
Run Code Online (Sandbox Code Playgroud)
这适用于单个svg图像.
实际上我有一个svg包含多层图像的图像,如:
第1层 - :这是透明的背景T恤图像
第二层 - :这是另一个包含颜色的T恤图像
第3层 - :这是应该放在T恤上的小贴纸图片
我的svg代码是 - :
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg crossOrigin="anonymous" width="1000px" height="1000px" version="1.1" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<g class="canvas_background">
<rect class="canvas_variant_color" width="998" height="998" x="0" y="0" style="" fill="#008080"/>
<rect real_size="16,22" height="547" class="canvas_border" width="343" y="160" x="335" fill="#008080" />
</g>
<g class="canvas_objects" style="" mask="url('#Sibnip5tjg')">
<g style="display: block;" transform="matrix(1,0,0,1,-146.5,-236.3909)">
<image …Run Code Online (Sandbox Code Playgroud) 我下面有一些代码,应该将SVG图像转换为PNG。它可以正常运行,但是会创建一个空白的PNG文件,而不是与原始SVG具有相同图像的PNG文件。我确实发现这不是cairo的错误,而是与rsvg有关的更多错误,我在这里得到了。
import cairo
import rsvg
img = cairo.ImageSurface(cairo.FORMAT_ARGB32, 640,480)
ctx = cairo.Context(img)
handle= rsvghandler.Handle('example.svg')
handle.render_cairo(ctx)
img.write_to_png("svg.png")
Run Code Online (Sandbox Code Playgroud)
我正在Windows 10上使用Python 3.6。
我无法终生弄清楚为什么它无法显示正确的图片。任何帮助将不胜感激。
我想做类似的事情:
import image
image.display_image('http://upload.wikimedia.org/wikipedia/commons/8/84/Example.svg')
Run Code Online (Sandbox Code Playgroud)
它会以图像的形式出现。
PS 我想要 PNG 或 JPEG,而不是 GIF。
我正在尝试在从SVG到PNG的rails应用程序中进行图像转换.由于Heroku此时无法/想要升级IM,因此ImageMagick无法解决这个问题.我正在测试一些在开发中使用RSVG2/Cairo但遇到障碍的想法.
我可以轻松地将SVG转换并保存为PNG,如下所示:
#svg_test.rb
require 'debugger'
require 'rubygems'
require 'rsvg2'
SRC = 'test.svg'
DST = 'test.png'
svg = RSVG::Handle.new_from_file(SRC)
surface = Cairo::ImageSurface.new(Cairo::FORMAT_ARGB32, 800, 800)
context = Cairo::Context.new(surface)
context.render_rsvg_handle(svg)
surface.write_to_png(DST)
Run Code Online (Sandbox Code Playgroud)
但这只能让我写出PNG文件.在应用程序中,我需要能够动态生成这些,然后将它们作为数据发送到客户端浏览器.我无法弄清楚如何做到这一点,或者即使它受到支持.我知道我至少可以调用surface.data来获取原始数据,但我对图像格式知之甚少,不知道如何将其作为PNG.
谢谢
我有一个带有 67 个单独路径的 SVG 图像。
是否有任何库/教程可以为每个路径创建单独的光栅图像,例如 PNG,并且可能根据路径 ID 命名它们?
rsvg ×11
svg ×7
python ×5
cairo ×3
imagemagick ×3
librsvg ×3
png ×3
python-3.x ×3
php ×2
tkinter ×2
image ×1
inkscape ×1
linux ×1
macos ×1
python-3.6 ×1