识别快递单号(2) - 加载图片到canvas
传送门: 识别快递单号(1) - 图像处理 转载请注明出处: http://www.cnblogs.com/zaiyuzhong/p/load-image-to-canvas.html
上篇说到我突然想到了一个问题: 这些代码究竟运行在什么位置, 手机端还是服务器? 又如何获取图片?
1. 手机端: 现在的浏览器还不支持javascript调用后置摄像头(Chrome可以调用前置摄像头), 需要开发一个App, 那么可以在拍照时确定条码的位置(像所有的扫码软件一样), 然后把这条线发送到服务器上. 那么服务器所做的就是灰度化, 二值化, 适当的闭操作让图像更清晰, 识别.
2. 服务器: 将上传来的图片灰度化, 二值化, 去除多余部分, 找到条码位置, 识别. 其中找条码位置比较复杂, 再一个比较浪费流量.
说到这里突然想起来还有html5呢, 获取选中的图片画到canvas上再处理. 做了一个尝试, 从<input type="file" />可以调用摄像头, 我用的是Android下的Chrome和iOS下的Safari来测试的.
如何通过<input type="file" />标签来获取数据请看这里: 如何预览将要上传的图片-使用H5的FileAPI
好了, 经过测试发现Chrome支持的很好, Safari不行, 寻找原因中... 测试代码如下:
<input type="file" id="upfile" />
<canvas style="border:1px solid #c3c3c3"></canvas>
<script>
document.querySelector('#upfile').onchange = function(evt){
if(evt.target.files.length < 1) return;
var file = evt.target.files[0];
if(file.type.match('image.*')) return; var reader = new FileReader();
reader.onloadend = function(e){
if(e.target.readyState == FileReader.DONE){
var c = document.querySelector('canvas');
var cxt = c.getContext('2d');
var img = new Image();
img.src = e.target.result;
c.width = img.width;
c.height = img.height; cxt.drawImage(img, 0, 0);
}
};
reader.readAsDataURL(file);
}
</script>
怀疑过图片加载延迟的问题, 改为img的onload事件中处理还是仅仅在Safari中没有图像. 在这个问题上浪费了不少时间, 暂时开始研究下一步, 以后看看能不能绕开绘制canvas这步. 嗯... 似乎Safari不支持javascript读取准备上传的照片... 好了这篇先这样, 下篇再接着说. 参考资料: Javascript图像处理系列
识别快递单号(2) - 加载图片到canvas的更多相关文章
- RX系列四 | RxAndroid | 加载图片 | 提交表单
RX系列四 | RxAndroid | 加载图片 | 提交表单 说实话,学RxJava就是为了我们在Android中运用的更加顺手一点,也就是RxAndroid,我们还是先一步步来,学会怎么去用的比较 ...
- 个人永久性免费-Excel催化剂功能第97波-快递单号批量查询物流信息
电商时代,快递已进千万家,做电商零售行业的,快递信息的再挖掘,也显得更有意义,是数据精细化运营中必不可少的一环.一般站在系统的角度,数据用于业务流转的增删改查使用,而对于分析需求来说,这些业务系统里集 ...
- jQuery-瀑布流-绝对定位布局(二)(延迟AJAX加载图片)
jQuery-瀑布流-绝对定位布局(二)(延迟AJAX加载图片) 瀑布流-绝对定位布局,与浮动布局的区别在于 1.布局不一样: 绝对定位:一个UL里面放置所有的绝对定位的LI: 浮动布局:多个(一 ...
- iOS网络加载图片缓存策略之ASIDownloadCache缓存优化
iOS网络加载图片缓存策略之ASIDownloadCache缓存优化 在我们实际工程中,很多情况需要从网络上加载图片,然后将图片在imageview中显示出来,但每次都要从网络上请求,会严重影响用 ...
- CSS和JavaScript以及Ajax实现预加载图片的方法及优缺点分析
预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度.这对图片画 廊及图片占据很大比例的网站来说十分有利,它保证了图片快速.无缝地发 ...
- BitmapFactory 加载图片到内存
Bitmap占用内存分析 Android的虚拟机是基于寄存器的Dalvik,它的最大堆(单个进程可用内存)大小一般是16M,当然不同设备是不一样的,可以查看/system/build.prop文件,[ ...
- 快递单号自动识别接口API-trackingmore
一.快递单号自动识别接口功能说明 (1)PC电脑端.移动APP或者自建网站集成物流查询功能时,只需要用户输入单号即可,不需要输入快递公司. (2)此接口可以配合Trackingmore的快递查询API ...
- ajax实现快递单号查询
效果:(代码写的有点乱,自行修改就可以了) 源码: index.php <!DOCTYPE html> <html lang="en"> <head& ...
- ios UITableView 异步加载图片并防止错位
UITableView 重用 UITableViewCell 并异步加载图片时会出现图片错乱的情况 对错位原因不明白的同学请参考我的另外一篇随笔:http://www.cnblogs.com/lesl ...
随机推荐
- MySQL ROOT密码更改
MySQLROOT密码 # mysql -u root -p Enter password: ERROR 1045 (28000): Access denied for user 'root'@'lo ...
- KVM 虚拟机联网方式:NAT 和 Bridge
KVM 客户机网络连接有两种方式: 用户网络(User Networking):让虚拟机访问主机.互联网或本地网络上的资源的简单方法,但是不能从网络或其他的客户机访问客户机,性能上也需要大的调整.NA ...
- Java类的加载の动态
类的加载方式 静态加载类,是编译时刻加载 动态加载类,是运行时刻加载 new创建对象:是静态加载类,在编译时刻就需要加载所有的可能使用到的类.有一个类有问题(如不存在),都不能通过编译,会报错. Cl ...
- Javascript模块化编程(三):require.js的用法
Javascript模块化编程(三):require.js的用法 原文地址:http://www.ruanyifeng.com/blog/2012/11/require_js.html 作者: 阮一峰 ...
- Menu与ActionBar的爱恨情仇
最近在开发一款音乐播放器,在开发过程中遇到了一点小麻烦,通过android API搞清楚了Menu与ActionBar的爱恨情仇,写了个小Demo祭奠一下那些年我们陷进去的坑,有不对的地方请大神们批评 ...
- 338. Counting Bits
https://leetcode.com/problems/counting-bits/ 给定一个非负数n,输出[0,n]区间内所有数的二进制形式中含1的个数 Example: For num = 5 ...
- Swift 备忘单和快速参考
Variables var myInt = var myExplicitInt: Int = // explicit type var x = , y = , z = // declare multi ...
- 判断一个字符串str不为空的方法
1.str == null; 2."".equals(str); 3.str.length 4.str.isEmpty(); 注意:length是属性,一般集合类对象拥有的属性,取 ...
- MVC Code First 当实体类发生变化时,如何自动更新数据库表
下面做一个例子,Category是用户新建的一个实体类,然后添加一个字段,然后让数据库中的Category表也添加一个字段 1.Category.cs
- 在jquery中,全选/全不选的表示方法
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...