单纯HTML5无法保存图片,但是可以调用摄像头生成图片,并发送给服务器,通过后台语言(比如php)发送给浏览器,便于用户下载
成都创新互联公司从2013年成立,先为利辛等服务建站,利辛等地企业,进行企业商务咨询服务。为利辛企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
canvas画布保存为图片:
function convertCanvasToImage(canvas) {
var image = new Image();
image.src = canvas.toDataURL("image/png");
return image;
canvas参数为你的canvas对象,返回一个图片对象,你可以将这个image放到网页结构中,如果要保存图像,可以将canvas.toDataURL("image/png")返回的base64格式的图片数据放到input(type=hidden)中,用户点击上传按钮(或设置表单自动提交),将base64格式的数据上传
形如:
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABbSURBVDhPY8AFMvJL/oMwlEs8yMgvJVcjyMbSYaERogCC0/OAGIkPwaVQMUhgQWiggWANIAzUhKoBpgjdMIhBUHsxAdxkUgHMBiiXeDAQNkICAsolHuC3kYEBAG/wdxC2W2tUAAAAAElFTkSuQmCC
服务器端接收到字符串(以上字符串可以直接在浏览器中打开,IE低版本就算了,能用canvas的浏览器都可以)后根据data:image/png得知应该保存的文件类型扩展名(png),然后将base64,后面的base64编码字符串解码(后端语言实现,如PHP用base64_decode()函数),将解码后的二进制数据以二进制的形式保存到服务器上(图片形式)
如果存数据库,可以直接存base64编码,读取时候解码也行,图片建议以文件形式存储,数据库不适合存大文件
首先你得搞明白为什么需要Base64这个东西,Base64的主要应用场景就是把二进制(Binary)的内容通过一个映射转换到可以用ASCII字符表达的字符串,然后便于使用HTTP协议在客户端和服务器端传输数据。所以,关键的一部你做的有些问题
byte[] bytes=decoder.decodeBuffer(s);
这里解码出来的byte[]已经是你的图片内容了,这些byte不可能再成功的构造成字符串了,否则为何还需要用Base64啊。所以,你需要保存的是解码出来的byte[],而不是Base64的字符串。
另外,Base64的编解码器,你用的那个BASE64Decoder是sun.misc提供的,为了确保最大化的兼容,比如运行在非Sun JVM的环境时,建议使用apache的common-codec。
无法实现。
window.location.href = "image/octet-stream"仅仅是用来将获取的图片数据在新窗口打开,浏览器就会自动提示下载。
可问题是image的数据从哪儿来?HTML5里面的Canvas支持象素级操作,可以获取图像数据,但一个网页不是一张图片,它是有许多的DOM和样式渲染而成,在JS中是无法将其转换成一张图片的,除非浏览器提供相关API,但目前并没有浏览器提供了类似的API,因此暂时无法实现。
你看现在所有的截图,要么是浏览器自带的,要么就要安装插件。