效果图:


zxing请自行下载

代码:

/**     * 生成二维码Bitmap     *     * @param content   文本内容     * @param logoBm    二维码中心的Logo图标(可以为null)     * @return 合成后的bitmap     */     public static Bitmap createQRImage(Context context,String data, Bitmap logoBm) {            try {                 if (data == null || "".equals(data)) {                 return null;             }                         int widthPix = ((Activity) context).getWindowManager().getDefaultDisplay().getWidth();            widthPix = widthPix / 5 * 3;            int heightPix = widthPix;               //配置参数             Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>();             hints.put(EncodeHintType.CHARACTER_SET, "utf-8");             //容错级别             hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);             //设置空白边距的宽度             hints.put(EncodeHintType.MARGIN, 3); //default is 4                // 图像数据转换,使用了矩阵转换             BitMatrix bitMatrix = new QRCodeWriter().encode(data, BarcodeFormat.QR_CODE, widthPix, heightPix, hints);             int[] pixels = new int[widthPix * heightPix];             // 下面这里按照二维码的算法,逐个生成二维码的图片,             // 两个for循环是图片横列扫描的结果             for (int y = 0; y < heightPix; y++) {                 for (int x = 0; x < widthPix; x++) {                     if (bitMatrix.get(x, y)) {                         pixels[y * widthPix + x] = 0xff000000;                     } else {                         pixels[y * widthPix + x] = 0xffffffff;                     }                 }             }                // 生成二维码图片的格式,使用ARGB_8888             Bitmap bitmap = Bitmap.createBitmap(widthPix, heightPix, Bitmap.Config.ARGB_8888);             bitmap.setPixels(pixels, 0, widthPix, 0, 0, widthPix, heightPix);                if (logoBm != null) {                 bitmap = addLogo(bitmap, logoBm);             }                return bitmap;            //必须使用compress方法将bitmap保存到文件中再进行读取。直接返回的bitmap是没有任何压缩的,内存消耗巨大!             //return bitmap != null && bitmap.compress(Bitmap.CompressFormat.JPEG, 100, new FileOutputStream(filePath));         } catch (Exception e) {             e.printStackTrace();         }            return null;     }        /**     * 在二维码中间添加Logo图案     */     private static Bitmap addLogo(Bitmap src, Bitmap logo) {         if (src == null) {             return null;         }            if (logo == null) {             return src;         }            //获取图片的宽高         int srcWidth = src.getWidth();         int srcHeight = src.getHeight();         int logoWidth = logo.getWidth();         int logoHeight = logo.getHeight();            if (srcWidth == 0 || srcHeight == 0) {             return null;         }            if (logoWidth == 0 || logoHeight == 0) {             return src;         }            //logo大小为二维码整体大小的1/5         float scaleFactor = srcWidth * 1.0f / 5 / logoWidth;         Bitmap bitmap = Bitmap.createBitmap(srcWidth, srcHeight, Bitmap.Config.ARGB_8888);         try {             Canvas canvas = new Canvas(bitmap);             canvas.drawBitmap(src, 0, 0, null);             canvas.scale(scaleFactor, scaleFactor, srcWidth / 2, srcHeight / 2);             canvas.drawBitmap(logo, (srcWidth - logoWidth) / 2, (srcHeight - logoHeight) / 2, null);                canvas.save(Canvas.ALL_SAVE_FLAG);             canvas.restore();         } catch (Exception e) {             bitmap = null;             e.getStackTrace();         }            return bitmap;     } 


更多相关文章

  1. android图片资源的适配问题
  2. android中的OOM问题 解决原则
  3. Android(安卓)图片压缩处理
  4. Android(安卓)Banner图片轮播控件+ViewPagerIndicator+ViewPager
  5. Android判断两个时间的大小
  6. android 常用 INTENT
  7. android as gradle 使用过称中 错误处理
  8. android轮播图封装 (网络图片glide解析,手势触摸,三种viewpager
  9. 新浪下载图片的ProgressBar进度样式源码

随机推荐

  1. Android View 相关源码分析之四 LinearLa
  2. android studio适配器Adapter
  3. 最简单的BufferQueue测试程序(一)
  4. 20155323 第四次实验 Android程序设计实
  5. Android Accounts Api使用指南
  6. Android(安卓)注解的方式绑定UI ID
  7. 还在为android图标适配烦恼?字体图标你值
  8. Android 上传图片到后台的一直方式Base64
  9. RecyclerView的使用详解
  10. Android常用UI之AlertDialog