android 生产二维码
来源:互联网 发布:虚拟机里安装linux 编辑:程序博客网 时间:2024/04/30 08:20
package publicclass;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import com.google.zxing.BarcodeFormat;import com.google.zxing.EncodeHintType;import com.google.zxing.WriterException;import com.google.zxing.common.BitMatrix;import com.google.zxing.qrcode.QRCodeWriter;import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;import java.util.Hashtable;import java.util.Random;/** * Created by ty-deng on 16/11/8. */public class BitmapUtil { /** * 根据指定内容生成自定义宽高的二维码图片 * * param logoBm * logo图标 * param content * 需要生成二维码的内容 * param width * 二维码宽度 * param height * 二维码高度 * throws WriterException * 生成二维码异常 */ public static Bitmap makeQRImage(Bitmap logoBmp, String content, int QR_WIDTH, int QR_HEIGHT) throws WriterException { try {// 图像数据转换,使用了矩阵转换 Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>(); hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);// 容错率/*hints.put(EncodeHintType.MARGIN, 2); // default is 4hints.put(EncodeHintType.MAX_SIZE, 350);hints.put(EncodeHintType.MIN_SIZE, 100);*/ BitMatrix bitMatrix = new QRCodeWriter().encode(content, BarcodeFormat.QR_CODE, QR_WIDTH, QR_HEIGHT, hints); int[] pixels = new int[QR_WIDTH * QR_HEIGHT]; for (int y = 0; y < QR_HEIGHT; y++) {// 下面这里按照二维码的算法,逐个生成二维码的图片,//两个for循环是图片横列扫描的结果 for (int x = 0; x < QR_WIDTH; x++) { if (bitMatrix.get(x, y)) { if (x < QR_WIDTH / 2 && y < QR_HEIGHT / 2) { pixels[y * QR_WIDTH + x] = 0xFF0094FF;// 蓝色 Integer.toHexString(new Random().nextInt()); } else if (x < QR_WIDTH / 2 && y > QR_HEIGHT / 2) { pixels[y * QR_WIDTH + x] = 0xFFFED545;// 黄色 } else if (x > QR_WIDTH / 2 && y > QR_HEIGHT / 2) { pixels[y * QR_WIDTH + x] = 0xFF5ACF00;// 绿色 } else { pixels[y * QR_WIDTH + x] = 0xFF000000;// 黑色 } } else { pixels[y * QR_WIDTH + x] = 0xffffffff;// 白色 } } }// ------------------添加图片部分------------------// Bitmap bitmap = Bitmap.createBitmap(QR_WIDTH, QR_HEIGHT, Bitmap.Config.ARGB_8888);// 设置像素点 bitmap.setPixels(pixels, 0, QR_WIDTH, 0, 0, QR_WIDTH, QR_HEIGHT);// 获取图片宽高 int logoWidth = logoBmp.getWidth(); int logoHeight = logoBmp.getHeight(); if (QR_WIDTH == 0 || QR_HEIGHT == 0) { return null; } if (logoWidth == 0 || logoHeight == 0) { return bitmap; }// 图片绘制在二维码中央,合成二维码图片// logo大小为二维码整体大小的1/5 float scaleFactor = QR_WIDTH * 1.0f / 5 / logoWidth; try { Canvas canvas = new Canvas(bitmap); canvas.drawBitmap(bitmap, 0, 0, null); canvas.scale(scaleFactor, scaleFactor, QR_WIDTH / 2, QR_HEIGHT / 2); canvas.drawBitmap(logoBmp, (QR_WIDTH - logoWidth) / 2, (QR_HEIGHT - logoHeight) /2, null); canvas.save(Canvas.ALL_SAVE_FLAG); canvas.restore(); return bitmap; } catch (Exception e) { bitmap = null; e.getStackTrace(); } } catch (WriterException e) { e.printStackTrace(); } return null; } /** * 获取十六进制的颜色代码.例如 "#6E36B4" , For HTML , * @return String */ public static String getRandColorCode(){ String r,g,b; Random random = new Random(); r = Integer.toHexString(random.nextInt(256)).toUpperCase(); g = Integer.toHexString(random.nextInt(256)).toUpperCase(); b = Integer.toHexString(random.nextInt(256)).toUpperCase(); r = r.length()==1 ? "0" + r : r ; g = g.length()==1 ? "0" + g : g ; b = b.length()==1 ? "0" + b : b ; return r+g+b; } /** * 根据指定内容生成自定义宽高的二维码图片 * * @param content * 需要生成二维码的内容 * @param width * 二维码宽度 * @param height * 二维码高度 * @throws WriterException * 生成二维码异常 */ public static Bitmap makeQRImage(String content, int width, int height) throws WriterException { Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>(); hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");// 图像数据转换,使用了矩阵转换 BitMatrix bitMatrix = new QRCodeWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints); int[] pixels = new int[width * height];// 按照二维码的算法,逐个生成二维码的图片,两个for循环是图片横列扫描的结果 for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { if (bitMatrix.get(x, y)) pixels[y * width + x] = 0xff000000; else pixels[y * width + x] = 0xffffffff; } }// 生成二维码图片的格式,使用ARGB_8888 Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); bitmap.setPixels(pixels, 0, width, 0, 0, width, height); return bitmap; } /** * 根据指定内容生成自定义宽高的二维码图片 * * @param content * 需要生成二维码的内容 * @param width * 二维码宽度 * @param height * 二维码高度 * @throws WriterException * 生成二维码异常 */ public static Bitmap makeQRColurImage(String content, int width, int height,int[] color) throws WriterException { Bitmap bitmap = null; try { Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>(); hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");// 图像数据转换,使用了矩阵转换 BitMatrix bitMatrix = new QRCodeWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints); int[] pixels = new int[width * height];// 按照二维码的算法,逐个生成二维码的图片,两个for循环是图片横列扫描的结果 for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { if (bitMatrix.get(x, y)) { if (x <= width / 2 && y < height / 2) { pixels[y * width + x] = color[0];// 蓝色 Integer.toHexString(new Random().nextInt()); } else if (x <= width / 2 && y >= height / 2) { pixels[y * width + x] = color[2];// 黄色 } else if (x > width / 2 && y >= height / 2) { pixels[y * width + x] = color[3];// 绿色 } else { pixels[y * width + x] = color[1];// 黑色 } } else { pixels[y * width + x] = 0xffffffff;// 白色 } } }// 生成二维码图片的格式,使用ARGB_8888 bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); bitmap.setPixels(pixels, 0, width, 0, 0, width, height); }catch (Exception e){ DataSub.dealError(e); } return bitmap; } /** * 从资源文件中获取图片转化成bitmap类型 * * @param context * 上下文 * @param drawableId * 资源文件id * @return */ public static Bitmap gainBitmap(Context context, int drawableId) { Bitmap bmp = BitmapFactory.decodeResource(context.getResources(), drawableId); return bmp; } /** * 在图片右下角添加水印 * * @param srcBMP * 原图 * @param markBMP * 水印88图片 * @return 合成水印后的图片 */ public static Bitmap composeWatermark(Bitmap srcBMP, Bitmap markBMP) { if (srcBMP == null) { return null; }// 创建一个新的和SRC长度宽度一样的位图 Bitmap newb = Bitmap.createBitmap(srcBMP.getWidth(), srcBMP.getHeight(), Bitmap.Config.ARGB_8888); Canvas cv = new Canvas(newb);// 在 0,0坐标开始画入原图 cv.drawBitmap(srcBMP, 0, 0, null);// 在原图的右下角画入水印 cv.drawBitmap(markBMP, srcBMP.getWidth() - markBMP.getWidth()*4/5, srcBMP.getHeight()*2/7 , null);// 保存 cv.save(Canvas.ALL_SAVE_FLAG);// 存储 cv.restore(); return newb; } /** * 给二维码图片加背景 * */ 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; }}
0 0
- android 扫描二维码 生产二维码
- android 生产二维码
- 二维码生产
- Zxing关于Android端生产二维码
- 前端生产二维码(HTML生产二维码)
- php生产二维码
- php生产二维码
- LuminanceSource二维码生产
- 使用js生产二维码
- zxing生产二维码
- 使用Qrcode生产二维码
- java-小功能-生产二维码
- Zxing生产二维码 附带添加logo
- Java二维码生产与解析代码实现
- android二维码
- android 二维码
- android二维码
- android 二维码
- java实现把数据库数据导出成word文件实现文件下载功能
- 中文字符通过ajax传到后台显示中文乱码
- 输入数字,判定空格和回车
- linux下搭建lua脚本语言的编程环境详解
- 微信平台url
- android 生产二维码
- 修改数据库的root密码
- 算法时间复杂度
- ndk command 报错
- log4j.properties 【配置说明】
- 为栈实现高效的max操作
- [D3D11] C++与GPU通信:在C++代码中更新HLSL中的常量缓冲区
- Android读取联系人的姓名及电话号码
- Spring Boot使用Druid数据源配置和监控配置