我在使用RMagick将SVG字符串转换为PNG字符串时遇到了令人沮丧的时间:
def convert_svg_to_png(str)
img = Magick::Image.from_blob(str) {
self.format = 'SVG'
self.background_color = 'transparent'
}
img.to_blob {
self.format = 'PNG'
}
end
我收到错误:'convert_svg_to_png': undefined method 'to_blob' for [ SVG 100x10 100x10+0+0 DirectClass 16-bit 167b]:Array)
我唯一的想法是img
之后的from_blob
实例不是Magick::Image
实例(因为错误表明它是[ SVG ... :Array]
)。我还没有找到任何在线内容,具体地解答将图像从SVG转换为内存中的PNG。很多提及to_blob
但没有可行的例子。
答案 0 :(得分:3)
好吧,经过一些实验,我发现我可以成功使用img.to_blob
:
def convert_svg_to_png(str)
img, data = Magick::Image.from_blob(str) {
self.format = 'SVG'
self.background_color = 'transparent'
}
img.to_blob {
self.format = 'PNG'
}
end
关键部分是img, data = Magick::Image...
作业。
答案 1 :(得分:2)
from_blob的RMagick doc表示from_blob会返回一个图像数组,所以我猜这应该可行:
arr = Magick::Image.from_blob(str)
str = arr[0].to_blob
答案 2 :(得分:0)
.to_blob
和.from_blob
都返回一组图片。要获得您想要的效果,只需在图像阵列上调用.first
即可获得所需内容。
def convert_svg_to_png(str)
img = Magick::Image.from_blob(str) {
self.format = 'SVG'
self.background_color = 'transparent'
}
img.first.to_blob {
self.format = 'PNG'
}
end
虽然提供的答案确实有效,但在这种情况下,我发现在变量赋值期间解构数组比在生成的数组上调用.first
更不易读。希望这有帮助!