Javascript 如何在JSF中将toDataURL方法返回的画布内容存储为磁盘上的图像
我已经使用svg和javascript创建了图像,我希望用户能够保存它。如何将此发送到bean并保存它 查看代码:Javascript 如何在JSF中将toDataURL方法返回的画布内容存储为磁盘上的图像,javascript,html,jsf-2,Javascript,Html,Jsf 2,我已经使用svg和javascript创建了图像,我希望用户能够保存它。如何将此发送到bean并保存它 查看代码: <script> var svg = $('#map').html().replace(/>\s+/g, ">").replace(/\s+</g, "<"); // strips off all spaces between tags canvg('cvs', svg, {
<script>
var svg = $('#map').html().replace(/>\s+/g, ">").replace(/\s+</g, "<");
// strips off all spaces between tags
canvg('cvs', svg, {
ignoreMouse: true,
ignoreAnimation: true
});
var canvas = document.getElementById('cvs');
var img = canvas.toDataURL("image/png");
</script>
var svg=$('#map').html().replace(/>\s+/g,“>”).replace(/\s+您可以通过如下隐藏的输入字段将数据URL发送到支持bean:
<h:form>
<h:inputHidden id="dataURL" value="#{userBean.dataURL}" />
<h:commandButton value="Submit" action="#{userBean.submit}"/>
</h:form>
var dataURL = canvas.toDataURL("image/png");
var hidden = document.getElementById("dataURL");
hidden.value = dataURL;
更新:toDataURL方法返回一个字符串,您可以将其保存为备份bean中的字符串,该字符串是base64编码的,因此可以将其解码回图像并保存到webapp根目录下的磁盘:
public class UserBean implements Serializable {
private String dataURL;
public String getDataURL() {
return dataURL;
}
public void setDataURL(String dataURL) {
this.dataURL = dataURL;
}
public void submit(){
ExternalContext external = FacesContext.getCurrentInstance().getExternalContext();
ServletContext servletContext = (ServletContext) external.getContext();
String filename = servletContext.getRealPath("cloud.png");
BASE64Decoder decoder = new BASE64Decoder();
byte[] decodedBytes = decoder.decodeBuffer(dataURL.split("^data:image/(png|jpg);base64,")[1]);
BufferedImage imag=ImageIO.read(new ByteArrayInputStream(decodedBytes));
ImageIO.write(imag, "png", new File(filename));
}
}
bean端的变量dataURL是什么?我如何处理该图像?谢谢,但我如何将该dataURL转换为图像并保存到文件夹?
public class UserBean implements Serializable {
private String dataURL;
public String getDataURL() {
return dataURL;
}
public void setDataURL(String dataURL) {
this.dataURL = dataURL;
}
public void submit(){
ExternalContext external = FacesContext.getCurrentInstance().getExternalContext();
ServletContext servletContext = (ServletContext) external.getContext();
String filename = servletContext.getRealPath("cloud.png");
BASE64Decoder decoder = new BASE64Decoder();
byte[] decodedBytes = decoder.decodeBuffer(dataURL.split("^data:image/(png|jpg);base64,")[1]);
BufferedImage imag=ImageIO.read(new ByteArrayInputStream(decodedBytes));
ImageIO.write(imag, "png", new File(filename));
}
}