将SVG和.JPG合并到一个图像中
Merge SVG and .JPG into one image?
我有一个在地图应用程序中使用SVG/VML(通过Raphael JS)设置的网站,其中SVG用于在背景地图图像上显示图形。这在屏幕上工作得很好,也适用于打印带有覆盖的硬拷贝地图。然而,当用户想要将带有SVG覆盖的地图图像保存到本地.JPG文件时,这种设置就失效了。
更具体地说,当图像顶部有SVG/VML元素时,使用大多数浏览器的标准右键单击功能"将图像另存为…"是不起作用的。右键单击地图,用户可以保存地图图像,但不需要覆盖。右键单击覆盖的SVG元素,用户获得的最佳效果是能够检查元素或保存一些HTML(因浏览器而异)。
所以我的主要问题是;是否可以将图像和SVG元素组合(最好是客户端,尽管我对选项持开放态度)成一个"扁平"图像,.JPG、.PNG或其他图像,然后右键单击并保存,或根据请求下载到用户的PC?
您需要做的是,而不是覆盖JPG和SVG:
- 拍摄原始图像
- 在内存中的SVG文件上绘制线条
- 将单个图像作为JPG输出到浏览器
这当然意味着您必须能够解释SVG。。。
一种可能性是将图像嵌入到SVG中,然后用组合的图像生成一个数据URL。以下示例以png格式实现了这一点:
var datauri = c.toDataURL('image/png');
其中c是格式化的SVG层。有关更多信息,请查看此开源编辑器,http://code.google.com/p/svg-edit/在svgcanvas.js和svg-editor.js文件中,是如何将svg导出为png文件的一个很好的示例。一开始有点难以理解,但写得很好。
由于安全限制(例如,我在Firefox中根本无法实现这一点),恐怕您在Canvas元素上渲染SVG时会遇到困难。
不过,这里有一个想法:
- 使用SVG
<image>
标记将图像放置在SVG DOM中 - 通过canvg库传递SVG代码
- 使用canvg的toDataURL方法生成图像
相关文章:
- 如何在鼠标悬停时在另一个图像上滑动图像.
- 如何将多个画布保存为一个图像
- 是否可以仅通过jQuery将图像替换为用户动态选择的另一个图像
- Javascript/jQuery压缩一个图像正确的评论帖子,并使用Ajax Laravel 5.2保存到控制器中
- 如何在设定的时间间隔内一次只显示一个图像
- 循环以检查数组中的最后一个图像
- 下载Div&画布为一个图像
- 当页面包含指向一个图像的多个链接时,fancyBox会复制缩略图辅助图像
- 在引导程序旋转木马中显示下一个图像
- 拉斐尔用一个图像填满了这个圆圈
- 将多个重叠的透明图像保存为一个图像
- 我怎么能把它做成这样一个图像就不能拖动了
- 普通JS:使80%宽度元素100%IF包含一个图像
- 当滑块只有一个图像时,如何禁用下一个/上一个按钮
- 如何使用onclick事件点击一个图像,并让它更改同一网页上的另一个图像
- 将多个画布保存为一个图像(使网站像PicFrame一样)
- 在 JavaScript 中将一个.PNG图像拖放到另一个图像上
- 如何在CSS中修复与另一个图像进行比较的图像
- 只有一个图像被绘制到画布上
- 使用 jQuery 在最后一个图像之后附加 HTML