一、自定义字符串生成二维码
/**
* 使用 ZXing Android Embedded 生成二维码
*
* @param s
* @return
*/
public Bitmap encodeBitmap(String s) {
Bitmap bitmap = null;
BitMatrix result = null;
MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
try {
result = multiFormatWriter.encode(s, BarcodeFormat.QR_CODE, DensityUtils.dp2px(this, 300), DensityUtils.dp2px(this, 300));
BarcodeEncoder barcodeEncoder = new BarcodeEncoder();
bitmap = barcodeEncoder.createBitmap(result);
} catch (WriterException e) {
e.printStackTrace();
} catch (IllegalArgumentException iae) {
return null;
}
return bitmap;
}
二、选择本地图片识别
/**
* 打开相册
*/
public void openGallery() {
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType("image/*");
photoPickerIntent.setAction(Intent.ACTION_GET_CONTENT);
try {
LogUtil.d(TAG, "can take picture");
startActivityForResult(photoPickerIntent, REQUEST_CODE_GALLERY);
} catch (Exception e) {
e.printStackTrace();
ToastUtil.showMessage("无法打开相册");
}
}
/**
* 图片解码
*
* @param data
* @return
*/
public String decodeImage(Intent data) {
Result result = null;
String codeString = "";
try {
if (data != null) {
File mFileTemp = new File(FileAccessor.IMAGE + "code" + FileAccessor.JPG);
InputStream inputStream = getContentResolver().openInputStream(data.getData());
FileOutputStream fileOutputStream = new FileOutputStream(mFileTemp);
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
fileOutputStream.write(buffer, 0, bytesRead);
}
fileOutputStream.close();
inputStream.close();
Bitmap bitmap = ImageFileCacheUtils.getInstance().getBitmap(mFileTemp);
try {
if (bitmap != null) {
int width = bitmap.getWidth();
int height = bitmap.getHeight();
int[] pixels = new int[width * height];
bitmap.getPixels(pixels, 0, width, 0, 0, width, height);
RGBLuminanceSource source = new RGBLuminanceSource(width, height, pixels);
BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(source));
Reader reader = new QRCodeReader();
try {
result = reader.decode(binaryBitmap);
} catch (NotFoundException | ChecksumException | FormatException e) {
e.printStackTrace();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
} catch (Exception e) {
LogUtil.e(TAG, "Error while creating temp file");
}
if (result != null) {
codeString = result.getText();
}
return codeString;
}
/**
* 获取bitmap
*
* @param file 文件
* @return bitmap
*/
public Bitmap getBitmap(File file) {
if (file == null) {
return null;
}
InputStream is = null;
try {
is = new BufferedInputStream(new FileInputStream(file));
return BitmapFactory.decodeStream(is);
} catch (FileNotFoundException e) {
e.printStackTrace();
return null;
} finally {
CloseUtils.closeIO(is);
}
}