-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
liyiwei
committed
Aug 29, 2018
1 parent
a052663
commit c1b895f
Showing
5 changed files
with
299 additions
and
16 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
145 changes: 145 additions & 0 deletions
145
app/src/main/java/group/tonight/vipvideohelper/other/QRCode.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,145 @@ | ||
package group.tonight.vipvideohelper.other; | ||
|
||
import android.graphics.Bitmap; | ||
import android.graphics.Matrix; | ||
|
||
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; | ||
|
||
/** | ||
* 当前类注释:生成二维码的工具类 | ||
* 作者:jinwenfeng on 16/2/18 13:50 | ||
* 邮箱:[email protected] | ||
* QQ: 823546371 | ||
* 公司:南京穆尊信息科技有限公司 | ||
* © 2016 jinwenfeng | ||
* ©版权所有,未经允许不得传播 | ||
*/ | ||
public class QRCode { | ||
private static int IMAGE_HALFWIDTH = 50;//宽度值,影响中间图片大小 | ||
/** | ||
* 生成二维码,默认大小为500*500 | ||
* | ||
* @param text 需要生成二维码的文字、网址等 | ||
* @return bitmap | ||
*/ | ||
public static Bitmap createQRCode(String text) { | ||
return createQRCode(text, 500); | ||
} | ||
|
||
/** | ||
* 生成二维码 | ||
* | ||
* @param text 需要生成二维码的文字、网址等 | ||
* @param size 需要生成二维码的大小() | ||
* @return bitmap | ||
*/ | ||
public static Bitmap createQRCode(String text, int size) { | ||
try { | ||
Hashtable<EncodeHintType, String> hints = new Hashtable<>(); | ||
hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); | ||
BitMatrix bitMatrix = new QRCodeWriter().encode(text, | ||
BarcodeFormat.QR_CODE, size, size, hints); | ||
int[] pixels = new int[size * size]; | ||
for (int y = 0; y < size; y++) { | ||
for (int x = 0; x < size; x++) { | ||
if (bitMatrix.get(x, y)) { | ||
pixels[y * size + x] = 0xff000000; | ||
} else { | ||
pixels[y * size + x] = 0xffffffff; | ||
} | ||
|
||
} | ||
} | ||
Bitmap bitmap = Bitmap.createBitmap(size, size, | ||
Bitmap.Config.ARGB_8888); | ||
bitmap.setPixels(pixels, 0, size, 0, 0, size, size); | ||
return bitmap; | ||
} catch (WriterException e) { | ||
e.printStackTrace(); | ||
return null; | ||
} | ||
} | ||
|
||
/** | ||
* 生成带logo的二维码,默认二维码的大小为500,logo为二维码的1/5 | ||
* | ||
* @param text 需要生成二维码的文字、网址等 | ||
* @param mBitmap logo文件 | ||
* @return bitmap | ||
*/ | ||
public static Bitmap createQRCodeWithLogo(String text, Bitmap mBitmap) { | ||
return createQRCodeWithLogo(text,500,mBitmap); | ||
} | ||
|
||
/** | ||
* 生成带logo的二维码,logo默认为二维码的1/5 | ||
* | ||
* @param text 需要生成二维码的文字、网址等 | ||
* @param size 需要生成二维码的大小() | ||
* @param mBitmap logo文件 | ||
* @return bitmap | ||
*/ | ||
public static Bitmap createQRCodeWithLogo(String text, int size, Bitmap mBitmap) { | ||
try { | ||
IMAGE_HALFWIDTH = size/10; | ||
Hashtable<EncodeHintType, Object> hints = new Hashtable<>(); | ||
hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); | ||
/* | ||
* 设置容错级别,默认为ErrorCorrectionLevel.L | ||
* 因为中间加入logo所以建议你把容错级别调至H,否则可能会出现识别不了 | ||
*/ | ||
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); | ||
BitMatrix bitMatrix = new QRCodeWriter().encode(text, | ||
BarcodeFormat.QR_CODE, size, size, hints); | ||
|
||
int width = bitMatrix.getWidth();//矩阵高度 | ||
int height = bitMatrix.getHeight();//矩阵宽度 | ||
int halfW = width / 2; | ||
int halfH = height / 2; | ||
|
||
Matrix m = new Matrix(); | ||
float sx = (float) 2 * IMAGE_HALFWIDTH / mBitmap.getWidth(); | ||
float sy = (float) 2 * IMAGE_HALFWIDTH | ||
/ mBitmap.getHeight(); | ||
m.setScale(sx, sy); | ||
//设置缩放信息 | ||
//将logo图片按martix设置的信息缩放 | ||
mBitmap = Bitmap.createBitmap(mBitmap, 0, 0, | ||
mBitmap.getWidth(), mBitmap.getHeight(), m, false); | ||
|
||
int[] pixels = new int[size * size]; | ||
for (int y = 0; y < size; y++) { | ||
for (int x = 0; x < size; x++) { | ||
if (x > halfW - IMAGE_HALFWIDTH && x < halfW + IMAGE_HALFWIDTH | ||
&& y > halfH - IMAGE_HALFWIDTH | ||
&& y < halfH + IMAGE_HALFWIDTH) { | ||
//该位置用于存放图片信息 | ||
//记录图片每个像素信息 | ||
pixels[y * width + x] = mBitmap.getPixel(x - halfW | ||
+ IMAGE_HALFWIDTH, y - halfH + IMAGE_HALFWIDTH); | ||
} else { | ||
if (bitMatrix.get(x, y)) { | ||
pixels[y * size + x] = 0xff000000; | ||
} else { | ||
pixels[y * size + x] = 0xffffffff; | ||
} | ||
} | ||
} | ||
} | ||
Bitmap bitmap = Bitmap.createBitmap(size, size, | ||
Bitmap.Config.ARGB_8888); | ||
bitmap.setPixels(pixels, 0, size, 0, 0, size, size); | ||
return bitmap; | ||
} catch (WriterException e) { | ||
e.printStackTrace(); | ||
return null; | ||
} | ||
} | ||
} |
107 changes: 107 additions & 0 deletions
107
app/src/main/java/group/tonight/vipvideohelper/other/QRCodeUtil.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,107 @@ | ||
package group.tonight.vipvideohelper.other; | ||
|
||
import android.graphics.Bitmap; | ||
import android.graphics.Color; | ||
import android.support.annotation.ColorInt; | ||
import android.support.annotation.Nullable; | ||
import android.text.TextUtils; | ||
|
||
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 java.util.Hashtable; | ||
|
||
/** | ||
* Bitmap qrCodeBitmap = QRCodeUtil.createQRCodeBitmap("https://www.baidu.com", 480, 480); | ||
* | ||
* @ClassName: QRCodeUtil | ||
* @Description: 二维码工具类 | ||
* @Author Wangnan | ||
* @Date 2017/2/8 | ||
*/ | ||
|
||
public class QRCodeUtil { | ||
|
||
/** | ||
* 创建二维码位图 | ||
* | ||
* @param content 字符串内容(支持中文) | ||
* @param width 位图宽度(单位:px) | ||
* @param height 位图高度(单位:px) | ||
* @return | ||
*/ | ||
@Nullable | ||
public static Bitmap createQRCodeBitmap(String content, int width, int height) { | ||
return createQRCodeBitmap(content, width, height, "UTF-8", "H", "2", Color.BLACK, Color.WHITE); | ||
} | ||
|
||
/** | ||
* 创建二维码位图 (支持自定义配置和自定义样式) | ||
* | ||
* @param content 字符串内容 | ||
* @param width 位图宽度,要求>=0(单位:px) | ||
* @param height 位图高度,要求>=0(单位:px) | ||
* @param character_set 字符集/字符转码格式 (支持格式:{@link CharacterSetECI })。传null时,zxing源码默认使用 "ISO-8859-1" | ||
* @param error_correction 容错级别 (支持级别:{@link ErrorCorrectionLevel })。传null时,zxing源码默认使用 "L" | ||
* @param margin 空白边距 (可修改,要求:整型且>=0), 传null时,zxing源码默认使用"4"。 | ||
* @param color_black 黑色色块的自定义颜色值 | ||
* @param color_white 白色色块的自定义颜色值 | ||
* @return | ||
*/ | ||
@Nullable | ||
public static Bitmap createQRCodeBitmap(String content, int width, int height, | ||
@Nullable String character_set, @Nullable String error_correction, @Nullable String margin, | ||
@ColorInt int color_black, @ColorInt int color_white) { | ||
|
||
/** 1.参数合法性判断 */ | ||
if (TextUtils.isEmpty(content)) { // 字符串内容判空 | ||
return null; | ||
} | ||
|
||
if (width < 0 || height < 0) { // 宽和高都需要>=0 | ||
return null; | ||
} | ||
|
||
try { | ||
/** 2.设置二维码相关配置,生成BitMatrix(位矩阵)对象 */ | ||
Hashtable<EncodeHintType, String> hints = new Hashtable<>(); | ||
|
||
if (!TextUtils.isEmpty(character_set)) { | ||
hints.put(EncodeHintType.CHARACTER_SET, character_set); // 字符转码格式设置 | ||
} | ||
|
||
if (!TextUtils.isEmpty(error_correction)) { | ||
hints.put(EncodeHintType.ERROR_CORRECTION, error_correction); // 容错级别设置 | ||
} | ||
|
||
if (!TextUtils.isEmpty(margin)) { | ||
hints.put(EncodeHintType.MARGIN, margin); // 空白边距设置 | ||
} | ||
BitMatrix bitMatrix = new QRCodeWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints); | ||
|
||
/** 3.创建像素数组,并根据BitMatrix(位矩阵)对象为数组元素赋颜色值 */ | ||
int[] pixels = new int[width * height]; | ||
for (int y = 0; y < height; y++) { | ||
for (int x = 0; x < width; x++) { | ||
if (bitMatrix.get(x, y)) { | ||
pixels[y * width + x] = color_black; // 黑色色块像素设置 | ||
} else { | ||
pixels[y * width + x] = color_white; // 白色色块像素设置 | ||
} | ||
} | ||
} | ||
|
||
/** 4.创建Bitmap对象,根据像素数组设置Bitmap每个像素点的颜色值,之后返回Bitmap对象 */ | ||
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); | ||
bitmap.setPixels(pixels, 0, width, 0, 0, width, height); | ||
return bitmap; | ||
} catch (WriterException e) { | ||
e.printStackTrace(); | ||
} | ||
|
||
return null; | ||
} | ||
} |
Oops, something went wrong.