Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to generate an Barcode and convert it to Bitmap using new Google Vision API?

How to generate an Barcode and convert it to Bitmap using new Google Vision API?

Barcode barcode = new Barcode();
Barcode.Email email = new Barcode.Email();
email.address = "[email protected]";
email.subject = "My Subject;
email.body = "My body content.";
barcode.email = email;

//Implement conversion Bitmap barcodeImage = barcodeToBitmap(barcode);// I do know this part.

like image 439
Joyofio987 Avatar asked Oct 31 '15 04:10

Joyofio987


People also ask

How to create a barcode in Google Sheets for your online business?

Below is a step by step look at how to create a barcode in Google Sheets for your online business. 1. Open Google Sheets and start a new spreadsheet 2. Organize your business information into columns (i.e. product name/number, code numbers, customer names, barcodes, etc.) 3. Add your products into the spreadsheet 4.

What is barcode and how to generate barcode?

In this article, I explain how to generate Barcode and after that how to read the bar code. First we need to know what bar code is. What is a barcode? A barcode is a small image of lines (bars) and spaces that is affixed to retail store items, identification cards, and postal mail to identify a particular product number, person, or location.

How does barcode scanning work with ML Kit?

With ML Kit's barcode scanning API, you can read data encoded using most standard barcode formats. Barcode scanning happens on the device, and doesn't require a network connection. Barcodes are a convenient way to pass information from the real world to your app.

How to add an action method for the barcode reader?

After Completing the barcode reader we create an action method for the reader, After create action method right click and add a view and design. str = "Please upload the bar code Image.";


1 Answers

You can detect your barcodes using Google Vision API and then use ZXing to generate the barcodes. You could try something like this, it uses zxing library:

public static Bitmap getBitmap(String barcode, int barcodeType, int width, int height)
{
    Bitmap barcodeBitmap = null;
    BarcodeFormat barcodeFormat = convertToZXingFormat(barcodeType);
    try
    {
        barcodeBitmap = encodeAsBitmap(barcode, barcodeFormat, width, height);
    }
    catch (WriterException e)
    {
        e.printStackTrace();
    }
    return barcodeBitmap;
}

private static BarcodeFormat convertToZXingFormat(int format)
{
    switch (format)
    {
        case 8:
            return BarcodeFormat.CODABAR;
        case 1:
            return BarcodeFormat.CODE_128;
        case 2:
            return BarcodeFormat.CODE_39;
        case 4:
            return BarcodeFormat.CODE_93;
        case 32:
            return BarcodeFormat.EAN_13;
        case 64:
            return BarcodeFormat.EAN_8;
        case 128:
            return BarcodeFormat.ITF;
        case 512:
            return BarcodeFormat.UPC_A;
        case 1024:
            return BarcodeFormat.UPC_E;
        //default 128?
        default:
            return BarcodeFormat.CODE_128;
    }
}


/**************************************************************
 * getting from com.google.zxing.client.android.encode.QRCodeEncoder
 *
 * See the sites below
 * http://code.google.com/p/zxing/
 * http://code.google.com/p/zxing/source/browse/trunk/android/src/com/google/zxing/client/android/encode/EncodeActivity.java
 * http://code.google.com/p/zxing/source/browse/trunk/android/src/com/google/zxing/client/android/encode/QRCodeEncoder.java
 */

private static final int WHITE = 0xFFFFFFFF;
private static final int BLACK = 0xFF000000;

private static Bitmap encodeAsBitmap(String contents, BarcodeFormat format, int img_width, int img_height) throws WriterException
{
    if (contents == null) {
        return null;
    }
    Map<EncodeHintType, Object> hints = null;
    String encoding = guessAppropriateEncoding(contents);
    if (encoding != null) {
        hints = new EnumMap<>(EncodeHintType.class);
        hints.put(EncodeHintType.CHARACTER_SET, encoding);
    }
    MultiFormatWriter writer = new MultiFormatWriter();
    BitMatrix result;
    try {
        result = writer.encode(contents, format, img_width, img_height, hints);
    } catch (IllegalArgumentException iae) {
        // Unsupported format
        return null;
    }
    int width = result.getWidth();
    int height = result.getHeight();
    int[] pixels = new int[width * height];
    for (int y = 0; y < height; y++) {
        int offset = y * width;
        for (int x = 0; x < width; x++) {
            pixels[offset + x] = result.get(x, y) ? BLACK : WHITE;
        }
    }

    Bitmap bitmap = Bitmap.createBitmap(width, height,
            Bitmap.Config.ARGB_8888);
    bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
    return bitmap;
}

private static String guessAppropriateEncoding(CharSequence contents) {
    // Very crude at the moment
    for (int i = 0; i < contents.length(); i++) {
        if (contents.charAt(i) > 0xFF) {
            return "UTF-8";
        }
    }
    return null;
}

}

like image 120
mmagician Avatar answered Oct 11 '22 04:10

mmagician