自定义生成二维码,可添加logo
2017-10-09 18:33
363 查看
在敲代码之前要记得导入jar包 core-3.2.1.jar 复制百度搜索就可以下载得到
package com.gss.zxingdemo; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.ImageView; import android.widget.TextView; import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.QRCodeWriter; import com.xys.libzxing.zxing.activity.CaptureActivity; import java.util.HashMap; import java.util.Map; public class MainActivity extends AppCompatActivity { private ImageView erweima; private ImageView img; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); erweima = (ImageView) findViewById(R.id.erweima); img = (ImageView) findViewById(R.id.diyerweima); //点击按钮吧ip地址生成二维码 findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Bitmap bitmap = generateBitmap("http://blog.csdn.net/u012702547/article/details/51501350", 400, 400); Bitmap bitmap2 = addBackground(bitmap, BitmapFactory.decodeResource(getResources(), R.drawable.background)); erweima.setImageBitmap(bitmap2); } }); //点击生成带logo的二维码 findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Bitmap bitmap = generateBitmap("孙明亮不是傻逼,孙明亮是臭傻逼", 600, 600); Bitmap logo = BitmapFactory.decodeResource(getResources(), R.drawable.jjjj); Bitmap bitmap1 = addLogo(bitmap, logo); img.setImageBitmap(bitmap1); } }); } /** * 生成二维码 */ private Bitmap generateBitmap(String content, int width, int height) { QRCodeWriter qrCodeWriter = new QRCodeWriter(); Map<EncodeHintType, String> hints = new HashMap<>(); hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); try { BitMatrix encode = qrCodeWriter.encode(content, BarcodeFormat.QR_CODE, width, height, hints); int[] pixels = new int[width * height]; for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { if (encode.get(j, i)) { pixels[i * width + j] = 0x00000000; } else { pixels[i * width + j] = 0xffffffff; } } } return Bitmap.createBitmap(pixels, 0, width, width, height, Bitmap.Config.RGB_565); } catch (Exception e) { e.printStackTrace(); } return null; } /** * 给二维码图片加背景 */ public static Bitmap addBackground(Bitmap foreground, Bitmap background) { int bgWidth = background.getWidth(); int bgHeight = background.getHeight(); int fgWidth = foreground.getWidth(); int fgHeight = foreground.getHeight(); Bitmap newmap = Bitmap .createBitmap(bgWidth, bgHeight, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(newmap); canvas.drawBitmap(background, 0, 0, null); canvas.drawBitmap(foreground, (bgWidth - fgWidth) / 2, (bgHeight - fgHeight) * 3 / 5 + 70, null); canvas.save(Canvas.ALL_SAVE_FLAG); canvas.restore(); return newmap; } /** * 添加图标 * * @param qrBitmap * @param logoBitmap * @return */ private Bitmap addLogo(Bitmap qrBitmap, Bitmap logoBitmap) { int qrBitmapWidth = qrBitmap.getWidth(); int qrBitmapHeight = qrBitmap.getHeight(); int logoBitmapWidth = logoBitmap.getWidth(); int logoBitmapHeight = logoBitmap.getHeight(); Bitmap blankBitmap = Bitmap.createBitmap(qrBitmapWidth, qrBitmapHeight, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(blankBitmap); canvas.drawBitmap(qrBitmap, 0, 0, null); canvas.save(Canvas.ALL_SAVE_FLAG); float scaleSize = 1.0f; while ((logoBitmapWidth / scaleSize) > (qrBitmapWidth / 5) || (logoBitmapHeight / scaleSize) > (qrBitmapHeight / 5)) { scaleSize *= 2; } float sx = 1.0f / scaleSize; canvas.scale(sx, sx, qrBitmapWidth / 2, qrBitmapHeight / 2); canvas.drawBitmap(logoBitmap, (qrBitmapWidth - logoBitmapWidth) / 2, (qrBitmapHeight - logoBitmapHeight) / 2, null); canvas.restore(); return blankBitmap; } }
布局的话一个按钮对应一个imageView,二维码是需要imageView来显示的
相关文章推荐
- Jquery.Qrcode在客户端动态生成二维码并添加自定义Logo
- [开源]C#二维码生成解析工具,可添加自定义Logo
- 用ZXING生成二维码的工具类(可以去掉白边,添加logo)
- Java 利用google.zxing类生成的BitMatrix二维码添加logo图标
- C# winform通过ThoughtWorks.QRCode生成二维码解码可以添加logo
- 二维码生成(CIFilter生成二维码,清晰度高的二维码,自定义颜色的二维码,带logo的二维码)
- Android:使用ZXing生成二维码(支持添加Logo图案)
- Java生成二维码可添加logo和文字功能
- Android生成二维码及添加logo
- 生成二维码,并添加logo
- Android:使用ZXing生成二维码(支持添加Logo图案)
- js jquery 生成二维码 jquery.qrcode.js,并在中间添加logo图片
- Android中使用ZXing生成二维码(支持添加Logo图案)
- 生成二维码 及 添加外边框和中间logo
- Zxing生成二维码和添加Logo
- 使用Zxing生成二维码,以及在生成的二维码中添加logo
- java生成二维码,可添加logo和文字
- java生成二维码,可添加logo和文字
- JAVA给微信公众号二维码添加LOGO时总是生成灰度图片的原因及解决办法
- 【VB.NET】利用 ZXing.Net 生成二维码(支持自定义LOGO)