如何从图像扫描二维码(不形成相机) [英] How to scan qr code from image(not form camera)
本文介绍了如何从图像扫描二维码(不形成相机)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的问题是:
- 如何将图像文件从 sd 卡获取到应用程序中
- 最后是如何解码条码图像文件并存储解码后的结果.
但是我从 zxing 库制作了 QR 扫描仪.我的意思是.如何从图像扫描二维码(不是相机)
But i have made QR Scanner from zxing library. I mean. How to scan qr code from image(not form camera)
推荐答案
我想在发布之前对其进行测试,所以花了我一段时间,我现在也在使用 ZXing 所以这对我来说也很方便:
I wanted to test it out before posting it so it took me a while, I'm also using ZXing right now so this comes handy for me as well:
当然,首先从图库中读取图像(这可以在您的活动中):
First of course, read the image from the gallery (this can be in your activity):
Intent pickIntent = new Intent(Intent.ACTION_PICK);
pickIntent.setDataAndType( android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
startActivityForResult(pickIntent, 111);
之后,只需获取活动结果上的图像uri,然后ZXing就会发挥作用:
After that, just get the image uri on the activity result and then ZXing will do the magic:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
//the case is because you might be handling multiple request codes here
case 111:
if(data == null || data.getData()==null) {
Log.e("TAG", "The uri is null, probably the user cancelled the image selection process using the back button.");
return;
}
Uri uri = data.getData();
try
{
InputStream inputStream = getContentResolver().openInputStream(uri);
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
if (bitmap == null)
{
Log.e("TAG", "uri is not a bitmap," + uri.toString());
return;
}
int width = bitmap.getWidth(), height = bitmap.getHeight();
int[] pixels = new int[width * height];
bitmap.getPixels(pixels, 0, width, 0, 0, width, height);
bitmap.recycle();
bitmap = null;
RGBLuminanceSource source = new RGBLuminanceSource(width, height, pixels);
BinaryBitmap bBitmap = new BinaryBitmap(new HybridBinarizer(source));
MultiFormatReader reader = new MultiFormatReader();
try
{
Result result = reader.decode(bBitmap);
Toast.makeText(this, "The content of the QR image is: " + result.getText(), Toast.LENGTH_SHORT).show();
}
catch (NotFoundException e)
{
Log.e("TAG", "decode exception", e);
}
}
catch (FileNotFoundException e)
{
Log.e("TAG", "can not open file" + uri.toString(), e);
}
break;
}
}
我对此进行了测试,效果很好,加油.
I tested this and it works, cheers.
这篇关于如何从图像扫描二维码(不形成相机)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文