使用内存中的 RMagick 将 SVG 转换为 PNG
Converting SVG to PNG with RMagick in memory
我在使用 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)
我唯一的想法是 from_blob
之后的 img
实例不是 Magick::Image
实例(因为错误说它是 [ SVG ... :Array]
)。我还没有在网上找到任何具体回答在内存中将图像从 SVG 转换为 PNG 的问题。多次提及 to_blob
但没有可行的示例。
嗯,经过一些实验我发现我可以成功使用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...
作业。
from_blob 的 RMagick doc 表示 from_blob returns 图像数组,所以我猜这应该有效:
arr = Magick::Image.from_blob(str)
str = arr[0].to_blob
.to_blob
和 .from_blob
都是 return 图像数组。要得到你想要的,只需在图像数组上调用 .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
更不清晰。希望这对您有所帮助!
我在使用 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)
我唯一的想法是 from_blob
之后的 img
实例不是 Magick::Image
实例(因为错误说它是 [ SVG ... :Array]
)。我还没有在网上找到任何具体回答在内存中将图像从 SVG 转换为 PNG 的问题。多次提及 to_blob
但没有可行的示例。
嗯,经过一些实验我发现我可以成功使用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...
作业。
from_blob 的 RMagick doc 表示 from_blob returns 图像数组,所以我猜这应该有效:
arr = Magick::Image.from_blob(str)
str = arr[0].to_blob
.to_blob
和 .from_blob
都是 return 图像数组。要得到你想要的,只需在图像数组上调用 .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
更不清晰。希望这对您有所帮助!