iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android如何实现URL转换成二维码
  • 621
分享到

Android如何实现URL转换成二维码

二维二维码urlAndroid 2022-06-06 01:06:03 621人浏览 独家记忆
摘要

二维码已经成为我们日常生活中的一个不可获取的产物,火车票上,景区门票,超市付款等等都会有二维码的身影。 本文将实现由URL转换成二维码的过程。 先看一下示例图 从示例图中我们

二维码已经成为我们日常生活中的一个不可获取的产物,火车票上,景区门票,超市付款等等都会有二维码的身影。

本文将实现由URL转换成二维码的过程。

先看一下示例图

从示例图中我们可以清晰地看到,URL被转换成了二维码。

下面跟随我来一起实现这个功能。

导入Google提供的开源

compile 'com.google.zxing:core:3.3.0'

来讲解一下核心的部分:二维码转换

①生成二维码Bitmap


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);
      //设置空白边距的宽度
      hints.put(EncodeHintType.MARGIN, 2); //default is 4
      // 图像数据转换,使用了矩阵转换
      BitMatrix bitMatrix = new QRCodeWriter().encode(content, 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);
      }
      //必须使用compress方法将bitmap保存到文件中再进行读取。直接返回的bitmap是没有任何压缩的,内存消耗巨大!
      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;
  }

③创建二维码文件存储目录


private 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 class SPUtil {
  private static final String CONFIG = "config";
  
  private static SharedPreferences getSharedPreference(String fileName) {
    return QRCodeApplication.getInstance().getSharedPreferences(fileName, Context.MODE_PRIVATE);
  }
  
  public static void putString(String key, String value) {
    SharedPreferences.Editor editor = getSharedPreference(CONFIG).edit();
    editor.putString(key, value).apply();
  }
  
  public static String getString(String key, String defValue) {
    SharedPreferences sharedPreference = getSharedPreference(CONFIG);
    return sharedPreference.getString(key, defValue);
  }
}

⑤展示二维码


public static void showThreadImage(final Activity mContext, final String text, final ImageView imageView, final int centerPhoto) {
    String preContent = SPUtil.getString("share_code_content", "");
    if (text.equals(preContent)) {
      String preFilePath = SPUtil.getString("share_code_filePath", "");
      imageView.setImageBitmap(BitmapFactory.decodeFile(preFilePath));
    } else {
      SPUtil.putString("share_code_content", text);
      final String filePath = getFileRoot(mContext) + File.separator + "qr_" + System.currentTimeMillis() + ".jpg";
      SPUtil.putString("share_code_filePath", filePath);
      //二维码图片较大时,生成图片、保存文件的时间可能较长,因此放在新线程中
      new Thread(new Runnable() {
        @Override
        public void run() {
          boolean success = QRCodeUtil.createQRImage(text, 800, 800, BitmapFactory.decodeResource(mContext.getResources(), centerPhoto),
              filePath);
          if (success) {
            mContext.runOnUiThread(new Runnable() {
              @Override
              public void run() {
                imageView.setImageBitmap(BitmapFactory.decodeFile(filePath));
              }
            });
          }
        }
      }).start();
    }
  }

构造一个输入页面的类,使用Bundle通过<key,value>传值(后期会改为MVVM-DataBinding形式)


public class ContentActivity extends AppCompatActivity implements View.OnClickListener {
  private EditText etUrl;
  private Button btnConvert;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_content);
    initView();
  }
  private void initView() {
    etUrl = (EditText) findViewById(R.id.et_url);
    btnConvert = (Button) findViewById(R.id.btn_convert);
    btnConvert.setOnClickListener(this);
  }
  @Override
  public void onClick(View v) {
    switch (v.getId()) {
      case R.id.btn_convert:
        String str_url = "https://" + etUrl.getText().toString();
        Bundle bundle = new Bundle();
        bundle.putString("url", str_url);
        // 当输入框为空时,提示用户
        if (str_url.equals("Https://")) {
          Toast.makeText(getApplicationContext(), "输入框不能为空", Toast.LENGTH_SHORT).show();
        } else {
          Intent intent = new Intent(ContentActivity.this, MainActivity.class);
          intent.putExtras(bundle);
          startActivity(intent);
        }
        break;
      default:
        break;
    }
  }
}

将二维码图片展示在页面上(后期会改为MVVM-DataBinding形式)


public class MainActivity extends AppCompatActivity {
  private ImageView iv;
//  private String url = "http://weibo.com/cnwutianhao";
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    String str_url = getIntent().getExtras().getString("url");
    iv = (ImageView) findViewById(R.id.iv_qrcode);
    QRCodeUtil.showThreadImage(this, str_url, iv, R.mipmap.ic_launcher);
  }
}

布局文件

①输入页面(后期会改为DataBinding形式)


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical"
  android:padding="10dp">
  <EditText
    android:id="@+id/et_url"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:layout_marginTop="100dp"
    android:hint="请输入网址"
    android:inputType="textUri" />
  <Button
    android:id="@+id/btn_convert"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="20dp"
    android:text="转换成二维码" />
</RelativeLayout>

②二维码展示页面


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  tools:context="com.tnnowu.android.qrcode.MainActivity">
  <ImageView
    android:id="@+id/iv_qrcode"
    android:layout_width="220dp"
    android:layout_height="220dp"
    android:layout_centerInParent="true"
    android:layout_marginTop="40dp"
    android:background="#FFFFFF" />
</RelativeLayout>

源代码已上传至GitHub,https://github.com/cnwutianhao/QRCode

您可能感兴趣的文章:Android实现二维码扫描和生成的简单方法Android上使用ZXing识别条形码与二维码的方法Android开发框架之自定义ZXing二维码扫描界面并解决取景框拉伸问题基于Android实现个性彩色好看的二维码Android编程实现二维码的生成与解析Android基于google Zxing实现各类二维码扫描效果iOS和Android用同一个二维码实现跳转下载链接的方法Android平台生成二维码并实现扫描 & 识别功能Android基于google Zxing实现二维码的生成Android 二维码 生成和识别二维码 附源码下载


--结束END--

本文标题: Android如何实现URL转换成二维码

本文链接: https://www.lsjlt.com/news/21807.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android中URL转换成二维码的实现方法
    这篇文章主要讲解了Android中URL转换成二维码的实现方法,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。二维码已经成为我们日常生活中的一个不可获取的产物,火车票上,景区门票,超市付款等等都会有二维码的身影。...
    99+
    2023-05-31
    url roi %d
  • word文档如何转换成二维码
    这篇文章将为大家详细讲解有关word文档如何转换成二维码,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。word文档转换成二维码的方法:1、打开浏览器,搜索二维码生成器,进入工具网站;2、在导航栏中选择“文...
    99+
    2023-06-14
  • Android studio 实现生成二维码和扫描二维码
    效果图 build.gradle(:app)添加依赖 dependencies { implementation 'com.google.zxing:core:3.3.3' imple...
    99+
    2023-09-30
    android studio android ide
  • python如何实现二维数组转换
    这篇文章主要为大家展示了“python如何实现二维数组转换”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“python如何实现二维数组转换”这篇文章吧。二维数组转...
    99+
    2024-04-02
  • php怎么实现自动将链接转换成二维码
    本文小编为大家详细介绍“php怎么实现自动将链接转换成二维码”,内容详细,步骤清晰,细节处理妥当,希望这篇“php怎么实现自动将链接转换成二维码”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、生成二维码在PHP...
    99+
    2023-07-05
  • 二维码生成器:如何在Go语言中实现实时生成JavaScript二维码?
    二维码已经成为现代生活中不可或缺的一部分,它们被用于广告、宣传、票据、付款等各种场景。二维码的生成和解码已经得到了广泛的支持,因此,越来越多的人开始使用二维码来代替传统的条形码。 在本文中,我们将介绍如何在Go语言中实现实时生成JavaS...
    99+
    2023-11-06
    实时 javascript 二维码
  • Go语言如何实现二维码生成?
    随着移动互联网的发展,二维码已经成为了一种非常普遍的扫码方式。在很多场景下,我们都可以看到二维码的身影。那么,在Go语言中如何实现二维码的生成呢?本文将会带大家一起探讨这个问题。 一、使用Go语言实现二维码的基本原理 在Go语言中,我们可...
    99+
    2023-06-04
    二维码 leetcode git
  • Java如何生成带网站链接(URL)的二维码
    QR 码 QR 码最常见的应用便是为网站中一个特定的网页或下载页带来流量。因此,QR码常常会编码URL或网站地址,用户可以通过手机摄像头扫描,并在其浏览器中打开。URL可以直接编码在...
    99+
    2024-04-02
  • ASP 中如何使用二维码 API 实现数据类型转换?
    随着移动互联网的普及,二维码已经成为了一种十分常见的信息传递方式。在 ASP 开发中,我们经常需要将一些数据转换成二维码来方便用户扫描获取信息。那么,ASP 中如何使用二维码 API 实现数据类型转换呢?本文将为您详细介绍。 一、二维码 ...
    99+
    2023-07-08
    二维码 api 数据类型
  • 如何根据url 批量下载二维码实现详解
    目录React 前端实现一、依赖二、思路整理1.将选用展示的数据放在数组中2. 实用 qrcode + canvas 将 url 装换成 canvas 的二维码图片3.二维码 cav...
    99+
    2023-05-20
    url 批量下载二维码 url批量下载
  • 二维码如何生成
    小编给大家分享一下二维码如何生成,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!二维码又称QR Code,QR全称Quick Response,是一个近几年来移动设...
    99+
    2023-06-17
  • 如何在Android应用中实现一个二维码生成功能
    本篇文章为大家展示了如何在Android应用中实现一个二维码生成功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Android 有自带的jar包可以生成二维码core-3.0.0.jar,其中的c...
    99+
    2023-05-31
    android roi
  • Android实现生成二维码并保存到相册
    效果图如下 保存的图片效果是: 保存到本地的,是整个视图,不只是单单的二维码的图片, 在了解的一番过程之后,我知道了, 1.首先要去获取保存图片的写入权限;(使用 https:/...
    99+
    2024-04-02
  • 二维码生成Java实现代码
    本文实例为大家分享了二维码生成Java实现代码,供大家参考,具体内容如下package com.yihaomen.barcode;import java.awt.BasicStroke;import java.awt.Graphics;im...
    99+
    2023-05-31
    java 二维码 ava
  • 如何在 ASP 中实现实时生成二维码?
    ASP 是一种非常流行的服务器端脚本语言,广泛用于开发 Web 应用程序。在 Web 应用程序中,二维码已经成为了非常流行的一种信息传递方式。在本文中,我们将介绍如何使用 ASP 实现实时生成二维码。 第一步:安装二维码生成库 要实现实时生...
    99+
    2023-09-05
    实时 二维码 关键字
  • javascript如何实现二维码
    这篇文章主要介绍javascript如何实现二维码,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!javascript实现二维码的方法:1、下载qrcodejs插件;2、使用qrcod...
    99+
    2024-04-02
  • 如何用Python生成二维码、解析二维码
    目录楔子生成二维码qrcodeMyQR解析二维码楔子 二维码在我们的生活中可以说是必不可少的,不单单是手机支付、其它很多地方也都需要扫描二维码。那么下面我们就来看看如何使用pyth...
    99+
    2024-04-02
  • Java中如何将对象转换为二维码?
    二维码是一种常见的矩阵条形码,它可以存储大量信息并且易于扫描。在Java中,我们可以使用第三方库来将对象转换为二维码。 本文将介绍如何使用Zxing库来将对象转换为二维码,并提供相应的代码示例。 引入Zxing库 首先,我们需要在项目...
    99+
    2023-08-29
    二维码 对象 path
  • Angular.js如何实现扫码枪扫码并生成二维码
    这篇文章主要讲解了“Angular.js如何实现扫码枪扫码并生成二维码”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Angular.js如何实现扫码枪扫码并生成二维码”吧!扫码枪扫码这个比较...
    99+
    2023-07-05
  • 小程序如何实现页面生成二维码
    首先,登录微信公众号平台,进入小程序管理后台,点击“生成小程序码”;在对话框中填写小程序的名称,并在开启入口中输入管理小程序的微信号;在手机中打开小程序,点击右上角,选择“复制本页路径”;最后,将路径复制到公众号平台上,点击生成,保存二维码...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作