Android开发 封装生成二维码的方法,随用随调
来源:互联网 发布:sm5 算法 编辑:程序博客网 时间:2024/04/29 11:11
public class ErWeiMaUtil { public static void makeErWetMa(final Activity activity, final ImageView iv, final int pic, final String url) { final String filePath = ErWeiMaUtil.getFileRoot(activity) + File.separator + "qr_" + System.currentTimeMillis() + ".jpg"; final Bitmap bitmap = BitmapFactory.decodeResource(activity.getResources(), pic); new Thread(new Runnable() { @Override public void run() { boolean success =createQRImage(url.toString(), 800, 800, bitmap, filePath); if (success) { activity.runOnUiThread(new Runnable() { @Override public void run() { iv.setImageBitmap(BitmapFactory.decodeFile(filePath)); } }); } } }).start(); } //文件存储根目录 @TargetApi(Build.VERSION_CODES.FROYO) public static String getFileRoot(Context context) { if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { File external = context.getExternalFilesDir(null); if (external != null) { return external.getAbsolutePath(); } } return context.getFilesDir().getAbsolutePath(); } public static boolean createQRImage(String content, int widthPix, int heightPix, Bitmap logoBm, String filePath) { try { if (content == null || "".equals(content)) { return false; } Map<EncodeHintType, Object> hints = new HashMap<>(); hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); BitMatrix bitMatrix = new QRCodeWriter().encode(content, BarcodeFormat.QR_CODE, widthPix, heightPix, hints); int[] pixels = new int[widthPix * heightPix]; 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; } } } 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 != null && bitmap.compress(Bitmap.CompressFormat.JPEG, 100, new FileOutputStream(filePath)); } catch (WriterException | IOException e) { e.printStackTrace(); } return false; } /** * 在二维码中间添加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; }}
调用:如下
shop_erweima = (ImageView) getActivity().findViewById(R.id.shop_erweima);url = "www.baidu.com";ErWeiMaUtil.makeErWetMa(getActivity(), shop_erweima, R.drawable.ya, url);注意:调用之前一定要有zxing包
0 0
- Android开发 封装生成二维码的方法,随用随调
- android生成二维码的封装包
- Android开发 二维码的生成
- Android二维码扫描开发和二维码的生成
- 微信支付生成二维码方法封装
- Android开发之二维码的生成与解析
- android开发游记:二维码和条形码的识别和生成
- Android开发之利用ZXing库实现二维码的生成
- Android生成带LOGO图片二维码的方法
- Android生成带LOGO图片二维码的方法
- Android生成带LOGO图片二维码的方法
- Android生成带LOGO图片二维码的方法
- PHP生成二维码的方法
- php二维码生成的方法
- java 生成 二维码的方法
- 【iOS开发】二维码生成 二维码读取 (带Logo的二维码)
- android之二维码的生成
- android二维码扫描及生成封装工具类
- 【哈理工OJ 750题纪念!】Hrbust 2200 Escaping【建图+最大流-------Dinic】
- Linux下压缩解压的那些事
- oracle常规恢复实例
- maven 下载安装配置
- java学习笔记之内部类
- Android开发 封装生成二维码的方法,随用随调
- Spring AOP详解
- Axure RP
- Linux终端常用命令与快捷键
- 关于mysql中 group by , order by , where, having 语句的区别与运用
- 网络之详解HTTP协议
- linux sd卡格式化
- PHP Debug on Mac
- java基础17_GUI