识别快递单号(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 ...
随机推荐
- Netty里的设计模式
最近在撸 Netty 源码,发现了一些模式,顺手做个笔记. 分析版本是4.0 1. 构造器模式 ServerBootstrap 和 Bootstrap 的构建 2. 责任链设计模式 pipeline ...
- es6中的promise对象
Promise是异步里面的一种解决方案,解决了回调嵌套的问题,es6将其进行了语言标准,同意了用法,提供了`promise`对象, promise对象有三种状态:pending(进行中) .Resol ...
- python的反转(切片)
看下面代码吧,简单来说不如直接看代码.如下: #coding=utf-8 __author__ = 'debude' a = 'python' print a[::-1] #从最后n开始,每走一位都打 ...
- 悲剧啊!Mysql的上古BUG!!!
导读 这是MySQL8.0修复的上古bug之一,在2003年由Percona的CEO(当时应该还没Percona吧)提出的bug#199,光看这bug号就扑面而来一股上古时代的沧桑气息. 问题的本质在 ...
- phpcurl类
1.需求 了解curl的基本get和post用法 2.例子 <?php class Curl{ private $timeout=30; public function set_timeout( ...
- 多线程AutoResetEvent
我们在线程编程的时候往往会涉及到线程的通信,通过信号的接受来进行线程是否阻塞的操作. AutoResetEvent 允许线程通过发信号互相通信.通常,此通信涉及线程需要独占访问的资源. AutoRes ...
- Object类.
equals方法. 比较的是内存地址.比较的是是否指向同一对象. toString:将对象转换成字符串. System.out.println()等价于 System.out.println(obj ...
- 使用wget命令时发生错误
用的是centos6.5, 当我使用命今 sudo wget https://cmake.org/files/v3.6/cmake-3.6.1.tar.gz 下载个cmake的包时, 发生了这样的错误 ...
- 离线安装 Python 2.7, paramiko 和 tornado
无非就是离线安装, 步骤比较繁琐, 记录一下. 需求很简单, 一个离线安装的 Python, 能跑 tornado 和 paramiko 1. 离线安装 Python 2.7 .tgz cd Pyth ...
- ssdb binlog机制 存疑
int BinlogQueue::del_range(uint64_t start, uint64_t end){ while(start <= end){ leveldb::WriteBatc ...