图片处理

在做物业管理项目时,风险不能后台提交需要保存图片,而且需要兼容好几种浏览器很困难,搞了好久!

最后发现将图片转义编码方法后重新输出到图片就可以解决这些问题!

如下在网上看到的:

大家可能注意到了,网页上有些图片的src或css背景图片的url后面跟了一大串字符,比如:data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAYAAABIdFAMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHhJREFUeNo8zjsOxCAMBFB/ KEAUFFR0Cbng3nQPw68ArZdAlOZppPFIBhH5EAB8b+Tlt9MYQ6i1BuqFaq1CKSVcxZ2Acs6406KUgpt5/ LCKuVgz5BDCSb13ZO99ZOdcZGvt4mJjzMVKqcha68iIePB86GAiOv8CDADlIUQBs7MD3wAAAABJRU5ErkJggg%3D%3D。那么这是什么呢?这是Data URI scheme。
  Data URI scheme是在RFC2397中定义的,目的是将一些小的数据,直接嵌入到网页中,从而不用再从外部文件载入。比如上面那串字符,其实是一张小图片,将这些字符复制黏贴到火狐的地址栏中并转到,就能看到它了,一张1X36的白灰png图片。
  在上面的Data URI中,data表示取得数据的协定名称,image/png 是数据类型名称,base64 是数据的编码方法,逗号后面就是这个image/png文件base64编码后的数据。


  目前,Data URI scheme支持的类型有:
data:,文本数据
data:text/plain,文本数据
data:text/html,HTML代码
data:text/html;base64,base64编码的HTML代码
data:text/css,CSS代码
data:text/css;base64,base64编码的CSS代码
data:text/javascript,Javascript代码
data:text/javascript;base64,base64编码的Javascript代码
data:image/gif;base64,base64编码的gif图片数据
data:image/png;base64,base64编码的png图片数据
data:image/jpeg;base64,base64编码的jpeg图片数据
data:image/x-icon;base64,base64编码的icon图片数据


  base64简单地说,它把一些 8-bit 数据翻译成标准 ASCII 字符,网上有很多免费的base64 编码和解码的工具,在PHP中可以用函数base64_encode() 进行编码,如echo base64_encode(file_get_contents(‘wg.png’));
目前,IE8、Firfox、Chrome、Opera浏览器都支持这种小文件嵌入。

 

 

据说用如下方法可以输出如上图片

 图片获取

下面我们要从Canvas获取图片数据,其核心思路是用canvas的toDataURL将Canvas的数据转换为base64位编码的PNG图像,类似于“data:image/png;base64,xxxxx”的格式。

[html]

  1. varimgData=canvas.toDataURL("image/png");

 

 

因为真正图像数据是base64编码逗号之后的部分,所以我们实际服务器处理的图像数据应该是这部分,我们可以用两种办法来获取。

第一种:是在前端截取22位以后的字符串作为图像数据,例如:

[html]

  1. vardata=imgData.substr(22);

 

 

如果要在上传前获取图片的大小,可以使用:

[html]

  1. varlength=atob(data).length;//atobdecodesastringofdatawhichhasbeenencodedusingbase-64encoding

 

最后通过

 Convert类里面的一个ToBase64String方法即可将数据转换为对应图片精选保存。

转换代码
 1         public static void ConvertBase64ToPic(string str)
 2         {
 3             
 4             try
 5             {
 6                 MemoryStream stream = new MemoryStream(Convert.FromBase64String(str));
 7 
 8                 Bitmap img = new Bitmap(stream);
 9                 img.Save("c:\\myBitmap.jpg");
10             }
11             catch (Exception)
12             {
13                 
14             }
15 
16 
17         }

 

 

 

三个队我有启发的网站:

1:让我知道图片可以这么显示的:

http://www.cnblogs.com/XL-Liang/archive/2012/06/01/2530509.html

2:让我懵懂风险可行方向的:

http://www.kuqin.com/webpagedesign/20120318/319063.html

3:最后可以保存为图片的:

http://tech.ddvip.com/2010-03/1268707623147197.html

转载于:https://www.cnblogs.com/PLifeCopyDown/archive/2012/10/26/2741732.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值