精华内容
下载资源
问答
  • zxing二维码生成扫描,识别二维码图片,长按识别二维码调用方便简洁,可选择导入as的modules 只需要在bulid.gradle(app) 中的dependencies :里面 compile project(path: ':BarCode')一下就能用。
  • 识别二维码图片

    2015-12-29 17:22:02
    ios使用CIQRCodeFeature(ios 8以后)识别图片二维码

    今天做项目的时候需要添加一个根据识别二维码图片,以下就是实现的步骤以及相关代码:

    1.在选择相册图片响应的代理事件(- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info)获取图片,并将其转换成NSData。

    - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
        NSString *type = [info objectForKey:UIImagePickerControllerMediaType];
        if ([type isEqualToString:@"public.image"]) {
            UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
            NSData *imageData = UIImagePNGRepresentation(image);
            //imgView.image = image;
            [picker dismissViewControllerAnimated:YES completion:nil];
            [self readQRCodeFromImageWithFileURL:imageData];
        }
    }

    2.iOS8以后可以直接使用 CIQRCodeFeature进行解析,代码如下:

    - (void)readQRCodeFromImageWithFileURL:(NSData *) data {
        CIImage *image = [CIImage imageWithData:data];
        //CIImage *image = [CIImage imageWithContentsOfURL:url];// 也可以根据URL找到CIImage
        if (image){
            //创建CIDetector
            CIDetector *qrDetector = [CIDetector detectorOfType:CIDetectorTypeQRCode
                                                        context:[CIContext contextWithOptions:@{kCIContextUseSoftwareRenderer : @(YES)}]
                                                        options:@{CIDetectorAccuracy : CIDetectorAccuracyHigh}];
            NSArray *features = [qrDetector featuresInImage:image];
            if ([features count] > 0){
                for (CIFeature *feature in features){
                    if (![feature isKindOfClass:[CIQRCodeFeature class]]){
                        continue;
                    }
                    CIQRCodeFeature *qrFeature = (CIQRCodeFeature *)feature;
                    NSString *content = qrFeature.messageString;//解析的数据
                    NSLog(@"content is :%@",content);
                }
            }
        }
        [self.extensionContext completeRequestReturningItems:nil
                                           completionHandler:^(BOOL expired) {
                                               NSLog(@"解析失败");
                                           }];
    }


    以上就是ios解析二维码图片的方法,以及相关代码,希望对大家有所帮助。

    展开全文
  • 高效识别二维码图片
  • PHP识别二维码图片内容,不用其它扩展,识别率还可以! require_once("lib/QrReader.php"); $qrcode = new QrReader('QR_201802281628057192.png'); //图片路径 $text = $qrcode->text(); //返回识别后的文本
  • java实现识别二维码图片功能

    千次阅读 2020-09-18 18:12:13
    java实现识别二维码图片功能 所需maven依赖 <dependency> <groupId>com.google.zxing</groupId> <artifactId>javase</artifactId> <version>3.2.1</version> </...

    java实现识别二维码图片功能

    所需maven依赖

    <dependency>
       <groupId>com.google.zxing</groupId>
       <artifactId>javase</artifactId>
       <version>3.2.1</version>
    </dependency>
    <dependency>
        <groupId>com.google.zxing</groupId>
        <artifactId>core</artifactId>
        <version>3.3.3</version>
    </dependency>
    

    实现的java类

    import com.google.zxing.*;
    import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
    import com.google.zxing.common.HybridBinarizer;
    import sun.misc.BASE64Decoder;
     
    import javax.imageio.ImageIO;
    import java.awt.image.BufferedImage;
    import java.io.ByteArrayInputStream;
    import java.io.File;
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Map;
    /**
     * 作用:二维码识别(图片)
     * 类名:QRCodeUtils
     **/
    public class QRCodeUtils {
        /**
         * 解析二维码,此方法解析一个路径的二维码图片
         * path:图片路径
         */
        public static String deEncodeByPath(String path) {
            String content = null;
            BufferedImage image;
            try {
                image = ImageIO.read(new File(path));
                LuminanceSource source = new BufferedImageLuminanceSource(image);
                Binarizer binarizer = new HybridBinarizer(source);
                BinaryBitmap binaryBitmap = new BinaryBitmap(binarizer);
                Map<DecodeHintType, Object> hints = new HashMap<DecodeHintType, Object>();
                hints.put(DecodeHintType.CHARACTER_SET, "UTF-8");
                Result result = new MultiFormatReader().decode(binaryBitmap, hints);//解码
                System.out.println("图片中内容:  ");
                System.out.println("content: " + result.getText());
                content = result.getText();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (NotFoundException e) {
    			//这里判断如果识别不了带LOGO的图片,重新添加上一个属性
                try {
    				image = ImageIO.read(new File(path));
    				LuminanceSource source = new BufferedImageLuminanceSource(image);
    				Binarizer binarizer = new HybridBinarizer(source);
    				BinaryBitmap binaryBitmap = new BinaryBitmap(binarizer);
    				Map<DecodeHintType, Object> hints = new HashMap<DecodeHintType, Object>();
    				//设置编码格式
    				hints.put(DecodeHintType.CHARACTER_SET, "UTF-8");
    				//设置优化精度
    				hints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE);
    				//设置复杂模式开启(我使用这种方式就可以识别微信的二维码了)
    				hints.put(DecodeHintType.PURE_BARCODE,Boolean.TYPE);
    				Result result = new MultiFormatReader().decode(binaryBitmap, hints);//解码
    				System.out.println("图片中内容:  ");
    				System.out.println("content: " + result.getText());
    				content = result.getText();
    			} catch (IOException e) {
    				e.printStackTrace();
    			} catch (NotFoundException e) {
    				e.printStackTrace();
    			}
            }
            return content;
        }
    }
    

    测试

    public static void main(String [] args){
    	deEncodeByPath("D:\\Users/admin/Desktop/erweima/timg (5).jpg");//二维码图片路径
    }
    

    输出结果:

    图片中内容:
    content: http://qrcode.online
    
    

    如果上述不能识别的话,那么就需要对图片处理一次,然后再进行识别,这里是个调优图片的工具类。

    package com.face.ele.common.utils;
    
    import javax.imageio.ImageIO;
    import java.awt.*;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    
    /**
     * @author weijianxing
     * @description: TODO
     * @date 2020/11/26 9:28
     */
    public class ImageOptimizationUtil {
    
        // 阈值0-255
        public static int YZ = 150;
    
        /**
         * 图像二值化处理
         *
         * @param filePath 要处理的图片路径
         * @param fileOutputPath 处理后的图片输出路径
         */
        public static void binarization(String filePath, String fileOutputPath) throws IOException {
            File file = new File(filePath);
            BufferedImage bi = ImageIO.read(file);
            // 获取当前图片的高,宽,ARGB
            int h = bi.getHeight();
            int w = bi.getWidth();
            int arr[][] = new int[w][h];
    
            // 获取图片每一像素点的灰度值
            for (int i = 0; i < w; i++) {
                for (int j = 0; j < h; j++) {
                    // getRGB()返回默认的RGB颜色模型(十进制)
                    arr[i][j] = getImageGray(bi.getRGB(i, j));// 该点的灰度值
                }
            }
    
            // 构造一个类型为预定义图像类型,BufferedImage
            BufferedImage bufferedImage = new BufferedImage(w, h, BufferedImage.TYPE_BYTE_BINARY);
    
            // 和预先设置的阈值大小进行比较,大的就显示为255即白色,小的就显示为0即黑色
            for (int i = 0; i < w; i++) {
                for (int j = 0; j < h; j++) {
                    if (getGray(arr, i, j, w, h) > YZ) {
                        int white = new Color(255, 255, 255).getRGB();
                        bufferedImage.setRGB(i, j, white);
                    } else {
                        int black = new Color(0, 0, 0).getRGB();
                        bufferedImage.setRGB(i, j, black);
                    }
                }
    
            }
            ImageIO.write(bufferedImage, "jpg", new File(fileOutputPath));
        }
    
        /**
         * 图像的灰度处理
         * 利用浮点算法:Gray = R*0.3 + G*0.59 + B*0.11;
         *
         * @param rgb 该点的RGB值
         * @return 返回处理后的灰度值
         */
        private static int getImageGray(int rgb) {
            String argb = Integer.toHexString(rgb);// 将十进制的颜色值转为十六进制
            // argb分别代表透明,红,绿,蓝 分别占16进制2位
            int r = Integer.parseInt(argb.substring(2, 4), 16);// 后面参数为使用进制
            int g = Integer.parseInt(argb.substring(4, 6), 16);
            int b = Integer.parseInt(argb.substring(6, 8), 16);
            int gray = (int) (r*0.28 + g*0.95 + b*0.11);
            return gray;
        }
    
        /**
         * 自己加周围8个灰度值再除以9,算出其相对灰度值
         *
         * @param gray
         * @param x 要计算灰度的点的横坐标
         * @param y 要计算灰度的点的纵坐标
         * @param w 图像的宽度
         * @param h 图像的高度
         * @return
         */
        public static int getGray(int gray[][], int x, int y, int w, int h) {
            int rs = gray[x][y] + (x == 0 ? 255 : gray[x - 1][y]) + (x == 0 || y == 0 ? 255 : gray[x - 1][y - 1])
                    + (x == 0 || y == h - 1 ? 255 : gray[x - 1][y + 1]) + (y == 0 ? 255 : gray[x][y - 1])
                    + (y == h - 1 ? 255 : gray[x][y + 1]) + (x == w - 1 ? 255 : gray[x + 1][y])
                    + (x == w - 1 || y == 0 ? 255 : gray[x + 1][y - 1])
                    + (x == w - 1 || y == h - 1 ? 255 : gray[x + 1][y + 1]);
            return rs / 9;
        }
    
        /**
         * 二值化后的图像的开运算:先腐蚀再膨胀(用于去除图像的小黑点)
         *
         * @param filePath 要处理的图片路径
         * @param fileOutputPath 处理后的图片输出路径
         * @throws IOException
         */
        public static void opening(String filePath, String fileOutputPath) throws IOException {
            File file = new File(filePath);
            BufferedImage bi = ImageIO.read(file);
            // 获取当前图片的高,宽,ARGB
            int h = bi.getHeight();
            int w = bi.getWidth();
            int arr[][] = new int[w][h];
            // 获取图片每一像素点的灰度值
            for (int i = 0; i < w; i++) {
                for (int j = 0; j < h; j++) {
                    // getRGB()返回默认的RGB颜色模型(十进制)
                    arr[i][j] = getImageGray(bi.getRGB(i, j));// 该点的灰度值
                }
            }
    
            int black = new Color(0, 0, 0).getRGB();
            int white = new Color(255, 255, 255).getRGB();
            BufferedImage bufferedImage = new BufferedImage(w, h, BufferedImage.TYPE_BYTE_BINARY);
            // 临时存储腐蚀后的各个点的亮度
            int temp[][] = new int[w][h];
            // 1.先进行腐蚀操作
            for (int i = 0; i < w; i++) {
                for (int j = 0; j < h; j++) {
                    /*
                     * 为0表示改点和周围8个点都是黑,则该点腐蚀操作后为黑
                     * 由于公司图片态模糊,完全达到9个点全为黑的点太少,最后效果很差,故改为了小于30
                     * (写30的原因是,当只有一个点为白,即总共255,调用getGray方法后得到255/9 = 28)
                     */
                    if (getGray(arr, i, j, w, h) < 30) {
                        temp[i][j] = 0;
                    } else{
                        temp[i][j] = 255;
                    }
                }
            }
    
            // 2.再进行膨胀操作
            for (int i = 0; i < w; i++) {
                for (int j = 0; j < h; j++) {
                    bufferedImage.setRGB(i, j, white);
                }
            }
            for (int i = 0; i < w; i++) {
                for (int j = 0; j < h; j++) {
                    // 为0表示改点和周围8个点都是黑,则该点腐蚀操作后为黑
                    if (temp[i][j] == 0) {
                        bufferedImage.setRGB(i, j, black);
                        if(i > 0) {
                            bufferedImage.setRGB(i-1, j, black);
                        }
                        if (j > 0) {
                            bufferedImage.setRGB(i, j-1, black);
                        }
                        if (i > 0 && j > 0) {
                            bufferedImage.setRGB(i-1, j-1, black);
                        }
                        if (j < h-1) {
                            bufferedImage.setRGB(i, j+1, black);
                        }
                        if (i < w-1) {
                            bufferedImage.setRGB(i+1, j, black);
                        }
                        if (i < w-1 && j > 0) {
                            bufferedImage.setRGB(i+1, j-1, black);
                        }
                        if (i < w-1 && j < h-1) {
                            bufferedImage.setRGB(i+1, j+1, black);
                        }
                        if (i > 0 && j < h-1) {
                            bufferedImage.setRGB(i-1, j+1, black);
                        }
                    }
                }
            }
    
            ImageIO.write(bufferedImage, "jpg", new File(fileOutputPath));
        }
    
        public static void main(String[] args) {
            String fullPath="E:\\weijianxing\\img\\微信图片_20201202160240.jpg";
            String newPath="E:\\weijianxing\\img\\1new_微信图片_20201202160240.jpg";
            try {
                ImageOptimizationUtil.binarization(fullPath,newPath);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
    

    可以手动测试,然后对改代码的部分进行调正对应的参数-- gray变量里的计算进行灰度调整

    private static int getImageGray(int rgb) {
            String argb = Integer.toHexString(rgb);// 将十进制的颜色值转为十六进制
            // argb分别代表透明,红,绿,蓝 分别占16进制2位
            int r = Integer.parseInt(argb.substring(2, 4), 16);// 后面参数为使用进制
            int g = Integer.parseInt(argb.substring(4, 6), 16);
            int b = Integer.parseInt(argb.substring(6, 8), 16);
            int gray = (int) (r*0.28 + g*0.95 + b*0.11);
            return gray;
        }
    

    等调整之后,在对图片进行识别即可。

    展开全文
  • 请问哪里有电脑识别二维码图片的api啊?开源的最好,收费的也勉强。
  • 识别二维码图片中 的二维码

    千次阅读 2016-11-28 16:39:11
    使用Zxing来识别二维码, 但为提高二维码识别成功率, 找出大致二维码所在区域生成图片, 再进行扫描, 亲测10张均可识别出来 using System.Drawing; using System.IO; using ZXing; foreach (FileInfo file in ...

    使用Zxing来识别二维码, 但为提高二维码识别成功率,  找出大致二维码所在区域生成图片, 再进行扫描,  亲测10张均可识别出来


    using System.Drawing;
    using System.IO;
    using ZXing;



                foreach (FileInfo file in folder.GetFiles("*.jpg"))
                {
                    
                    using (var srcImage = Image.FromFile(file.FullName)) // 创建源文件 Image 实例
                    {
                        using (var desImage = new Bitmap(srcImage.Width, srcImage.Height)) // 创建目标 Image 实例
                        {
                            using (var g = Graphics.FromImage(desImage)) // 通过目标 Image 创建 Graphics 对象
                            {
                                var srcRect = new Rectangle(250, 70, 550, 280); // 源图区域 Rectangle
    
                                var desRect = new Rectangle(250, 70, 550, 280); // 目标区域 Rectangle
    
                                g.FillRectangle(Brushes.White, 0, 0, desImage.Width - 1, desImage.Height - 1); // 填充背景色
                                g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Low; 
                                g.DrawImage(srcImage, desRect, srcRect, GraphicsUnit.Pixel); // 将源图区域绘制到目标区域
    
                                string path = string.Empty;
                                path = Path.Combine(path1, file.Name);
                                desImage.Save(path, srcImage.RawFormat); // 以源图格式保存图片
    
                                BarcodeReader reader0 = new BarcodeReader();
                                reader0.Options.CharacterSet = "UTF-8";
                                Bitmap map0 = new Bitmap(path);
                                Result result0 = reader0.Decode(map0);
    
                                string xx0 = string.Empty;
                                if (result0 == null)
                                {
                                    xx0 = "";
                                }
                                else
                                {
                                    xx0 = result0.Text;
                                }
                                map0.Dispose();
    
                                string[] strName = file.Name.Split('.');
                                string name = strName[0];
    
    
                                result = result +"第"+ name + "个:"+result0 + ";  ";
                            }
                        }
                        srcImage.Dispose();
                    }



    获取二维码区域 生成图


    再进行识别,轻松没问题





    展开全文
  • http://www.jianshu.com/p/7b1ee88151ed 转载于:https://www.cnblogs.com/ls1949/p/5843115.html

    http://www.jianshu.com/p/7b1ee88151ed

    转载于:https://www.cnblogs.com/ls1949/p/5843115.html

    展开全文
  • 前端识别二维码图片

    千次阅读 2019-07-25 00:34:12
    来自:https://gitee.com/guyandog/QR_BR 具体代码请下载 本站资源demo guyandog-QR_BR-master.zip 或者 guyandog-QR_BR-master -改动.zip 如有不清楚的可以留言交流 ...
  • - (IBAction)reconizerPictureClick:(UIButton *)sender { ...二维码扫描的结果是 %@",scannedResult);    return;  }    i = i+0.5;  }     }
  • 用CIDetector类读取相册中的二维码遇到的问题是手机截屏的图片可以读取成功,手机拍照的图片取出成功率低。并且不支持读取条形码。解决办法:读取相册中的二维码/条形码,使用ZBarSDK,下面介绍一下怎么在工程中引入...
  • 网上搜下“vb解析二维码” “vb读取二维码” 找到的几个代码也是假的或者就是其他语言的... 因为有几万个二维码图片要批量进行识别。 [img=https://img-bbs.csdn.net/upload/201609/11/1473585847_372613.jpg][/img]
  • 可以通过读取图片中的信息,来逆向识别二维码的内容, 主要使用了ZBarCodeImage这个类的功能。 而这个类需要在服务器上安装php-zbarcode 具体安装方法见https://www.cnblogs.com/mengzhilva/p/10670228.h...
  • 识别二维码

    2018-06-30 16:22:39
    选择二维码图片,进行识别二维码,里面包含测试页面和JS源码
  • qrcode.js的识别解析二维码图片和生成二维码图片 JS识别解析二维码
  • 微信分享sdk分享二维码图片到安卓微信,没有长按识别二维码选项。但是再次转发后就有此选项。看了网友的回答,没有真正解决这个问题的。有高手请赐教啊!拜谢!!
  • csdn选择很难找到完善的代码,都是网上随便下的源码,甚至很多半成品。...vs2017,net4.61.功能:1选择摄像头列表,2打开摄像头识别二维码,3文本生成二维码并保存为文件,4打开图片识别二维码
  • qrcode.js的识别解析二维码图片和生成二维码图片

    万次阅读 热门讨论 2018-04-04 14:11:17
    qrcode只通过前端就能生成二维码和解析二维码图片, 首先要引入文件qrcode.js,下载地址为:http://static.runoob.com/download/qrcodejs-04f46c6.zip; 1、识别本地图片:  通过文件的形式获取到本地的图片,...
  • 扫描二维码 长按识别二维码
  • <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0"> <title>my-pro</title>...
  • zbar的库识别二维码

    2015-08-13 16:26:43
    Zbar二维码解析库,识别二维码图片,但中文是乱码的
  • 在两位大神的原有的资源基础上合而为一,快速全屏扫描出二维码,感谢前人的无私。 使用eclipse,java,zxing,android
  • Android利用zxing用相机识别二维码,以及识别本地图片二维码,解压后用Android可直接打开,附教程:https://blog.csdn.net/mountain_hua/article/details/80699778
  • 微信长按识别二维码

    2017-04-14 11:52:36
    微信有自动识别二维码图片的功能,当它发现图片中含有二维码,自动会跳出扫描二维码的选项(图片必须包含指纹),而你要做的则是一张把二维码和指纹指示合二为一的图片 1.在网上找一张指纹素材图片与二维码图片...
  • 识别webview中图片,如果是二维码图片长按识别二维码
  •  程序使用类库zxing.dll(用来识别二维码),根据图片识别二维码方法是通用的 (1)识别二维码并得到二维码信息的方法。(传入参数为BitMap对象) public string RecognizePic(Bitmap image) { s...
  • webview长按图片识别二维码 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,878
精华内容 10,751
关键字:

怎么识别二维码图片