将 SVG 分享到 Facebook
Share SVG to Facebook
用户自定义 SVG,当他们满意时,我想给他们提供在 Facebook 上分享图像的选项。
我知道 Facebook 不接受 SVG,因此,在阅读 this 问题后,我使用 canvg
得出以下结论:
var svgText = "<svg>" + $("#canvas2").html() + "</svg>";
canvg(document.getElementById('drawingCanvas'), svgText);
var img = document.getElementById('drawingCanvas').toDataURL("image/png");
尽管命名为 .toDataURL
,但 img
并不是 URL(至少,我认为不是),而是一个超过 10,000 个字符的字符串data:image/png;base64,...
.
的人
如果我随后尝试允许用户在 Facebook 上共享 PNG,
window.FB.ui({
href: "https://dna.land",
method: 'feed',
name: 'name',
link: "dna.land",
picture: img,
caption: 'mywebsite.com',
description: "description",
message: "message"
}, function(response) {});
我收到的错误消息是 "the parameter href" 是必需的(我清楚地提供了...也许 img
太长并且 JSON 被截断了?),尽管我也看到我没有为 picture
.
提供有效的 URL
如何在 Facebook 上分享图像数据?
如果无法使用 PNG 的原始 base 64 编码来执行此操作,我不反对将 PNG 文件临时存储在服务器上。但是,理想情况下,我只会存储 24 小时、几个月或一些较小的时间跨度,然后能够在用户 post 消失的情况下将其删除。这可能吗?
Despite the naming of .toDataURL, img is not then a URL (at least, I don't think it is), but a >10,000-character string that beings with data:image/png;base64,....
这正是 Data URI 的意思!并且函数名称 toDataURL()
没有误导性。
在您的情况下,您需要做的是将 Base64 编码的 图像(由数据 URI 表示)转换为文件并将其上传到某处(可能在您自己的服务器或任何云存储提供商,如 Amazon S3 或 Google 云存储),然后在 Facebook 上分享 url。
在您自己的服务器上:
如果您将它上传到您自己的服务器,那么您可以简单地通过 ajax POST 数据 URL,将其转换为图像和 return URL 的 URL那个形象。要转换 Base64 图像,您需要寻找有关如何使用后端 language/system 进行转换的具体方法。例如,要将Base64编码的图像转换成
中的文件
- PHP:看看this answer
- Python:看看this answer
- NodeJS:看看this answer
对于任何其他后端,只需执行 Google 搜索,您应该找到执行此操作的方法。
正在上传到第三方云存储服务:
如果您想将图像上传到任何第三方服务,您可以获得 Blob object from the canvas by using Canvas.toBlob() 函数并将生成的 blob 上传到提供程序(可能通过使用 Javascript / REST API 提供被他们)。据我所知,许多流行的云存储提供商将允许您上传具有适当 MIME 类型的 blob,但您应该始终检查是否支持。
用户自定义 SVG,当他们满意时,我想给他们提供在 Facebook 上分享图像的选项。
我知道 Facebook 不接受 SVG,因此,在阅读 this 问题后,我使用 canvg
得出以下结论:
var svgText = "<svg>" + $("#canvas2").html() + "</svg>";
canvg(document.getElementById('drawingCanvas'), svgText);
var img = document.getElementById('drawingCanvas').toDataURL("image/png");
尽管命名为 .toDataURL
,但 img
并不是 URL(至少,我认为不是),而是一个超过 10,000 个字符的字符串data:image/png;base64,...
.
如果我随后尝试允许用户在 Facebook 上共享 PNG,
window.FB.ui({
href: "https://dna.land",
method: 'feed',
name: 'name',
link: "dna.land",
picture: img,
caption: 'mywebsite.com',
description: "description",
message: "message"
}, function(response) {});
我收到的错误消息是 "the parameter href" 是必需的(我清楚地提供了...也许 img
太长并且 JSON 被截断了?),尽管我也看到我没有为 picture
.
如何在 Facebook 上分享图像数据?
如果无法使用 PNG 的原始 base 64 编码来执行此操作,我不反对将 PNG 文件临时存储在服务器上。但是,理想情况下,我只会存储 24 小时、几个月或一些较小的时间跨度,然后能够在用户 post 消失的情况下将其删除。这可能吗?
Despite the naming of .toDataURL, img is not then a URL (at least, I don't think it is), but a >10,000-character string that beings with data:image/png;base64,....
这正是 Data URI 的意思!并且函数名称 toDataURL()
没有误导性。
在您的情况下,您需要做的是将 Base64 编码的 图像(由数据 URI 表示)转换为文件并将其上传到某处(可能在您自己的服务器或任何云存储提供商,如 Amazon S3 或 Google 云存储),然后在 Facebook 上分享 url。
在您自己的服务器上:
如果您将它上传到您自己的服务器,那么您可以简单地通过 ajax POST 数据 URL,将其转换为图像和 return URL 的 URL那个形象。要转换 Base64 图像,您需要寻找有关如何使用后端 language/system 进行转换的具体方法。例如,要将Base64编码的图像转换成
- PHP:看看this answer
- Python:看看this answer
- NodeJS:看看this answer
对于任何其他后端,只需执行 Google 搜索,您应该找到执行此操作的方法。
正在上传到第三方云存储服务:
如果您想将图像上传到任何第三方服务,您可以获得 Blob object from the canvas by using Canvas.toBlob() 函数并将生成的 blob 上传到提供程序(可能通过使用 Javascript / REST API 提供被他们)。据我所知,许多流行的云存储提供商将允许您上传具有适当 MIME 类型的 blob,但您应该始终检查是否支持。