webview长按图片识别二维码

第一次写博客,主要是做这个功能是临时让加的功能,当时一头雾水,就想着用zxing,但是具体怎么做也不太清楚,然后就查了很多资料,所以在此记录一下。
导入zxing包

implementation 'com.google.zxing:core:3.3.3'

首先是长按webview里面的图片,实现长按监听功能

  /*** 长按webview图片*/webView.setOnLongClickListener(new View.OnLongClickListener() {@Overridepublic boolean onLongClick(View v) {final WebView.HitTestResult htr = ((WebView) v).getHitTestResult();//获取所点击的内容if (htr.getType() == WebView.HitTestResult.IMAGE_TYPE //判断被点击的类型为图片|| htr.getType() == WebView.HitTestResult.IMAGE_ANCHOR_TYPE|| htr.getType() == WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE) {imagePath = htr.getExtra();getDecodeAbleBitmap(imagePath);}return false;}});

然后就是将获取到的网络图片下载下来,通过流转成Bitmap,注意的是,必须在子线程中实现网络下载

/**** @param picturePath 网络图片文件路径* @return*/private   void getDecodeAbleBitmap(final String picturePath) {new Thread(new Runnable() {@Overridepublic void run() {try {URL url = new URL(picturePath);HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();//这里就简单的设置了网络的读取和连接时间上线,如果时间到了还没成功,那就不再尝试httpURLConnection.setReadTimeout(8000);httpURLConnection.setConnectTimeout(8000);if(httpURLConnection.getResponseCode()==200) {InputStream inputStream = httpURLConnection.getInputStream();//这里直接就用bitmap取出了这个流里面的图片,哈哈,其实整篇文章不就主要是这一句嘛Bitmap bm = BitmapFactory.decodeStream(inputStream);//下面这是把图片携带在Message里面,简单,不多说Message message = Message.obtain();message.obj = bm;handler.sendMessage(message);inputStream.close();}} catch (Exception e) {e.printStackTrace();}}}).start();}
***

在handler中进行解码操作


//使用Handler更新主线程(UI线程)private Handler handler = new Handler(){public void handleMessage(Message msg) {Bitmap bitmap=(Bitmap) msg.obj;final Result ret = parsePic(bitmap);if (null == ret) {ToastUtil.show(act,"未解析到结果");} else {if (ret.toString().startsWith("http://")||ret.toString().startsWith("https://")){AlertDialog.Builder builder = new AlertDialog.Builder(act);builder.setMessage(ret.toString());builder.setTitle("识别成功");builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {//用默认浏览器打开扫描得到的地址Intent intent = new Intent();intent.setAction("android.intent.action.VIEW");Uri url = Uri.parse(ret.toString());intent.setData(url);startActivity(intent);dialog.dismiss();}});builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {dialog.dismiss();}});builder.create().show();}else{ToastUtil.show(act,ret.toString());}}}};

以下才是重点,解码方法。利用zxing


 /*** 解析二维码图片* @return*/public Result parsePic(Bitmap bitmap) {//解析转换类型UTF-8Hashtable<DecodeHintType, String> hints = new Hashtable<DecodeHintType, String>();hints.put(DecodeHintType.CHARACTER_SET, "utf-8");//新建一个RGBLuminanceSource对象,将bitmap图片传给此对象int width = bitmap.getWidth();int height = bitmap.getHeight();int[] data = new int[width * height];bitmap.getPixels(data, 0, width, 0, 0, width, height);RGBLuminanceSource rgbLuminanceSource = new RGBLuminanceSource(width,height,data);//将图片转换成二进制图片BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(rgbLuminanceSource));//初始化解析对象QRCodeReader reader = new QRCodeReader();//开始解析Result result = null;try {result = reader.decode(binaryBitmap, hints);} catch (Exception e) {e.printStackTrace();}return result;}

好了,所有用到的方法都在此了,希望有此需求的少走弯路

webview长按图片识别二维码相关推荐

  1. uniapp 对富文本中的图片预览及长按图片识别二维码/保存图片

    uniapp 对富文本中的图片预览及长按图片识别二维码/保存图片 富文本一定要使用uniapp提供的<rich-text>标签,不要使用 v-html 因为<rich-text> ...

  2. 微信小程序:长按图片识别二维码

    方法一:使用小程序提供的image组件,image组件上有一个show-menu-by-longpress的属性,设置为true,当image被长按时会弹出选择菜单 <image show-me ...

  3. 微信iOS长按无法识别二维码

    真的是无力吐槽微信的坑真的多把人能呕死,做了个公众号开发一大堆的坑 希望你看完每个字 分享一下ios微信长按无法识别二维码的问题 在网上找了一大堆的处理方式说增加img 的padding.设置缩放的. ...

  4. 图片识别二维码,二维码的黑白格线是怎么组合的?

    图片识别二维码,同一信息多次生成二维码,生成的二维码的构造是一样的吗? 近十年来,我国电子信息技术飞速发展,在这个通信技术高速发展的时代,产生的众多产品对我们的生活产生了重大的影响,它们让我们的生活变 ...

  5. HTML中,苹果手机长按图片或二维码会跳动

    HTML中,苹果手机长按图片或二维码会跳动 在img标签添加以下属性即可: draggable="false"

  6. 微信小程序-预览图片识别二维码

    wx.getImageInfo(Object object) 获取图片信息.网络图片需先配置download域名才能生效. 测试图片地址:http://mmbiz.qpic.cn/mmbiz_png/ ...

  7. 使用JS调用手机本地摄像头或者相册图片识别二维码/条形码

    接着昨天的需求,不过这次不依赖微信,使用纯js唤醒手机本地摄像头或者选择手机相册图片,识别其中的二维码或者是条形码.昨天,我使用微信扫一扫识别,效果超棒的.不过如果依赖微信的话,又怎么实现呢,这里介绍 ...

  8. 通过二维码图片识别二维码内容方法

    示例代码功能见-识别二维码工具 反解析二维码工具 识别条码工具 反解析条码工具http://sberwm.gsjlw.com/ 可以通过读取图片中的信息,来逆向识别二维码的内容, 主要使用了ZBarC ...

  9. python 图片识别二维码_教你用Python实现实时二维码识别

    鸽了好久,最近准备要更新了,想了很久将来可能会固定化的更新内容,会照顾我各种读者,比如这个Python一小时栏目,我让你在一个小时内实现一个有趣有用的小玩意,适合Python初学者或者编程兴趣者来食用 ...

最新文章

  1. 图.exe 已触发了一个断点。 出现了_学术简报︱基于保护综合重要度的最小断点集优选方法...
  2. Java设计模式:设计模式基础知识和原则
  3. 09、组策略之软件分发(05)
  4. C++手写a除以b的正余数
  5. telegraf输出MySQL_Grafana+influxdb+telegraf初探-快速监控主机与mysql
  6. jelly bean android,Jelly Bean占Android系统份额突破10%
  7. 第27课 老狼老狼几点钟 《小学生C++趣味编程》
  8. ORA-06413 连接未打开的处理办法【独家办法】
  9. 《Unix传奇》:众神的创世记
  10. 高精度乘法+刘汝佳BigNumber高精度结构体
  11. python 开源cms内容管理系统_八大CMS内容管理系统推荐
  12. 怀旧服务器联盟优势,魔兽世界tbc联盟服务器选哪个_wowtbc怀旧服联盟服务器排名_3DM网游...
  13. 如何搞懂html+php实现个人博客网站?【附代码详解】毕业设计 大作业项目
  14. 力扣 2104. 子数组范围和
  15. IE被劫持的手动解除
  16. log4j2的一些配置,为某个类某个方法单独文件打印日志,定时删除日志和springboot的logback日志单独类打印
  17. 238 除自身以外数组的乘积(前后缀分解)
  18. reading : Mask R-CNN(Kaiming He Georgia Gkioxari Piotr Dolla ́r Ross Girshick Facebook AI Research)
  19. C语言源文件名为什么无效,c语言源程序常错误分类及其改错.doc
  20. JAVA从零单排之前因

热门文章

  1. matlab2015崩溃,Matlab 2015b 启动时崩溃 MATLAB crashes during startup on Ubuntu 16.04
  2. spring-retry总结
  3. guava retry使用
  4. hadoop2.x下Yarn详解
  5. 6-4 删除字符 (20分)
  6. 测试理论-黑盒白盒简介(二)
  7. Github上关于iOS的各种开源项目集合(强烈建议大家收藏,查看,总有一款你需要)(转载)
  8. joseph环c语言课程设计,Joseph环课程设计.doc
  9. 【珍藏】CMU大师对软件工程师的系统建议(附书和论文下载)
  10. ROS :process has died