Android Zxing自定义二维码识别(二)

一、自定义字符串生成二维码

 /**
     * 使用 ZXing Android Embedded 生成二维码
     *
     * @param s
     * @return
     */
    public Bitmap encodeBitmap(String s) {
        Bitmap bitmap = null;
        BitMatrix result = null;
        MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
        try {
            result = multiFormatWriter.encode(s, BarcodeFormat.QR_CODE, DensityUtils.dp2px(this, 300), DensityUtils.dp2px(this, 300));
            BarcodeEncoder barcodeEncoder = new BarcodeEncoder();
            bitmap = barcodeEncoder.createBitmap(result);
        } catch (WriterException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException iae) {
            return null;
        }
        return bitmap;
    }

二、选择本地图片识别

/**
     * 打开相册
     */

    public void openGallery() {
        Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
        photoPickerIntent.setType("image/*");
        photoPickerIntent.setAction(Intent.ACTION_GET_CONTENT);
        try {
            LogUtil.d(TAG, "can take picture");
            startActivityForResult(photoPickerIntent, REQUEST_CODE_GALLERY);
        } catch (Exception e) {
            e.printStackTrace();
            ToastUtil.showMessage("无法打开相册");
        }
    }
  • 识别图片内的字符串
/**
     * 图片解码
     *
     * @param data
     * @return
     */
    public String decodeImage(Intent data) {
        Result result = null;
        String codeString = "";

        try {
            if (data != null) {
                File mFileTemp = new File(FileAccessor.IMAGE + "code" + FileAccessor.JPG);
                InputStream inputStream = getContentResolver().openInputStream(data.getData());
                FileOutputStream fileOutputStream = new FileOutputStream(mFileTemp);
                byte[] buffer = new byte[1024];
                int bytesRead;
                while ((bytesRead = inputStream.read(buffer)) != -1) {
                    fileOutputStream.write(buffer, 0, bytesRead);
                }
                fileOutputStream.close();
                inputStream.close();
                Bitmap bitmap = ImageFileCacheUtils.getInstance().getBitmap(mFileTemp);
                try {
                    if (bitmap != null) {
                        int width = bitmap.getWidth();
                        int height = bitmap.getHeight();
                        int[] pixels = new int[width * height];
                        bitmap.getPixels(pixels, 0, width, 0, 0, width, height);
                        RGBLuminanceSource source = new RGBLuminanceSource(width, height, pixels);
                        BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(source));
                        Reader reader = new QRCodeReader();
                        try {
                            result = reader.decode(binaryBitmap);
                        } catch (NotFoundException | ChecksumException | FormatException e) {
                            e.printStackTrace();
                        }
                    }


                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        } catch (Exception e) {
            LogUtil.e(TAG, "Error while creating temp file");
        }
        if (result != null) {
            codeString = result.getText();
        }
        return codeString;
    }
/**
     * 获取bitmap
     *
     * @param file 文件
     * @return bitmap
     */
    public Bitmap getBitmap(File file) {
        if (file == null) {
            return null;
        }
        InputStream is = null;
        try {
            is = new BufferedInputStream(new FileInputStream(file));
            return BitmapFactory.decodeStream(is);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return null;
        } finally {
            CloseUtils.closeIO(is);
        }
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,022评论 3 119
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,262评论 4 61
  • 又到岁末盘点、总结和计划的时间了,每天为了事业和家庭忙忙碌碌,总想稍稍停下脚步细细品味时光,幸好在行色匆匆中也能把...
    陈思梅阅读 517评论 1 0
  • 一头白发,走路颤颤悠悠的阿宝,已经九十岁了。 活到这个岁数的人,都是有福的。但是,于目不识丁一生都没出...
    大眼铃阅读 324评论 0 0
  • 最近在重温《欢乐颂》,一直很喜欢安迪"大女人"的气场,但第二次看,却被剧中的乖乖女关雎尔吸引。她从小家境优渥,在5...
    墨子爵阅读 233评论 4 1