Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android应用程序中生成条码图像_Android_Image_Barcode - Fatal编程技术网

在Android应用程序中生成条码图像

在Android应用程序中生成条码图像,android,image,barcode,Android,Image,Barcode,我需要生成1D条形码图像,并根据给定的13个字符的代码将其设置为ImageView。有人能帮我吗?请在以下网址查看答案: 他们建议使用java PDF操纵库。它还能够生成条形码图像 您可以在我链接的问题中找到示例代码谢谢各位的回答。。。在此期间,我找到了解决方案,以下是我使用的: 这是一个很适合我的图书馆,所以如果有人有同样的问题,我建议使用它 再次感谢 您可以使用zxing库轻松生成条形码 首先,在libs文件夹下找到core.jar libs/core.jar 您可以从这里下载ZXing-

我需要生成1D条形码图像,并根据给定的13个字符的代码将其设置为ImageView。有人能帮我吗?

请在以下网址查看答案:

他们建议使用java PDF操纵库。它还能够生成条形码图像


您可以在我链接的问题中找到示例代码

谢谢各位的回答。。。在此期间,我找到了解决方案,以下是我使用的: 这是一个很适合我的图书馆,所以如果有人有同样的问题,我建议使用它


再次感谢

您可以使用zxing库轻松生成条形码

首先,在libs文件夹下找到core.jar

libs/core.jar
您可以从这里下载ZXing-2.1.zip

()

解压缩文件后,找到jar文件

\ZXing-2.1\zxing-2.1\core\core.jar
然后编写自己的代码,如下所示

import java.util.EnumMap;
import java.util.Map;

import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.Gravity;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;

public class BarcodeExampleActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    LinearLayout l = new LinearLayout(this);
    l.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
    l.setOrientation(LinearLayout.VERTICAL);

    setContentView(l);

    // barcode data
    String barcode_data = "123456";

    // barcode image
    Bitmap bitmap = null;
    ImageView iv = new ImageView(this);

    try {

        bitmap = encodeAsBitmap(barcode_data, BarcodeFormat.CODE_128, 600, 300);
        iv.setImageBitmap(bitmap);

    } catch (WriterException e) {
        e.printStackTrace();
    }

    l.addView(iv);

    //barcode text
    TextView tv = new TextView(this);
    tv.setGravity(Gravity.CENTER_HORIZONTAL);
    tv.setText(barcode_data);

    l.addView(tv);

    }

    /**************************************************************
     * 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;

    Bitmap encodeAsBitmap(String contents, BarcodeFormat format, int img_width, int img_height) throws WriterException {
    String contentsToEncode = contents;
    if (contentsToEncode == null) {
        return null;
    }
    Map<EncodeHintType, Object> hints = null;
    String encoding = guessAppropriateEncoding(contentsToEncode);
    if (encoding != null) {
        hints = new EnumMap<EncodeHintType, Object>(EncodeHintType.class);
        hints.put(EncodeHintType.CHARACTER_SET, encoding);
    }
    MultiFormatWriter writer = new MultiFormatWriter();
    BitMatrix result;
    try {
        result = writer.encode(contentsToEncode, 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;
    }

}
import java.util.EnumMap;
导入java.util.Map;
导入android.app.Activity;
导入android.graphics.Bitmap;
导入android.os.Bundle;
导入android.view.Gravity;
导入android.widget.ImageView;
导入android.widget.LinearLayout;
导入android.widget.LinearLayout.LayoutParams;
导入android.widget.TextView;
导入com.google.zxing.BarcodeFormat;
导入com.google.zxing.EncodeHintType;
导入com.google.zxing.MultiFormatWriter;
导入com.google.zxing.writereException;
导入com.google.zxing.common.BitMatrix;
公共类条形码ExampleActivity扩展活动{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
线性布局l=新的线性布局(本);
l、 setLayoutParams(新的LayoutParams(LayoutParams.MATCH_父级,LayoutParams.MATCH_父级));
l、 设置方向(线性布局。垂直);
setContentView(l);
//条形码数据
字符串条形码_data=“123456”;
//条码图像
位图=空;
ImageView iv=新的ImageView(本);
试一试{
位图=encodeAsBitmap(条形码数据,条形码格式.CODE_128600300);
iv.设置图像位图(位图);
}捕获(写入异常e){
e、 printStackTrace();
}
l、 addView(iv);
//条形码文本
TextView tv=新的TextView(此);
电视。设置重力(重力。水平中心);
tv.setText(条形码数据);
l、 addView(电视);
}
/**************************************************************
*从com.google.zxing.client.android.encode.qrcodencoder获取
* 
*请参阅下面的网站
* 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
*/
专用静态最终整型白色=0xFFFFFFFF;
私有静态最终整数黑色=0xFF000000;
位图encodeAsBitmap(字符串内容、条形码格式、int-img\u宽度、int-img\u高度)引发WriterException{
字符串contentsToEncode=内容;
if(contentsToEncode==null){
返回null;
}
映射提示=null;
字符串编码=猜测适当编码(contentsToEncode);
if(编码!=null){
提示=新的EnumMap(EncodeHintType.class);
put(EncodeHintType.CHARACTER\u集,编码);
}
MultiFormatWriter writer=新的MultiFormatWriter();
位矩阵结果;
试一试{
结果=writer.encode(内容编码、格式、img\u宽度、img\u高度、提示);
}捕获(IllegalArgumentException iae){
//不支持的格式
返回null;
}
int width=result.getWidth();
int height=result.getHeight();
int[]像素=新int[宽度*高度];
对于(int y=0;y0xFF){
返回“UTF-8”;
}
}
返回null;
}
}
公共位图Ean13_编码(字符串qrData,int qrCodeDimension){
位图Bitmap=Bitmap.createBitmap(1,1,Bitmap.Config.ARGB_8888);
QRCodeEncoder QRCodeEncoder=新的QRCodeEncoder(qrData,null,
Contents.Type.TEXT,BarcodeFormat.EAN_13.toString(),QRCodeDimension);
试一试{
位图=qrCodeEncoder.encodeAsBitmap();
}捕获(写入异常e){
e、 printStackTrace();
};
返回位图;
};
公共最终类QRCodeEncoder{
专用静态最终整型白色=0xFFFFFFFF;
私有静态最终整数黑色=0xFF000000;
private int dimension=Integer.MIN_值;
私有字符串内容=null;
私有字符串displayContents=null;
私有字符串title=null;
专用条码格式=null;
私有布尔编码=假;
公共QRCodeEncoder(字符串数据、捆绑包、字符串类型、字符串格式、int维){
这个维度=维度;
编码=编码内容(数据、包、类型、格式);
}
公共字符串getContents(){
返回内容;
}
公共字符串getDisplayContents(){
返回显示内容;
}
公共字符串getTitle(){
返回标题;
}
私有布尔编码内容(字符串数据、捆绑包、字符串类型、字符串格式字符串){
//如果未提供格式,则默认为QR_代码。
格式=空;
if(formatString!=null){
试一试{
format=条形码格式.valueOf(formatString);
}捕获(IllegalArgumentException iae){
//那就忽略它吧
}
}
if(format==null | | format==BarcodeFormat.QR_码){
this.format=BarcodeFormat.QR_码;
EncodeQRCodeContent(数据、,
public Bitmap Ean13_Encode(String qrData,  int qrCodeDimention) {
    Bitmap bitmap= Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888);       
    QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(qrData, null,
    Contents.Type.TEXT, BarcodeFormat.EAN_13.toString(), qrCodeDimention);
    try {
        bitmap = qrCodeEncoder.encodeAsBitmap();
    } catch (WriterException e) {
        e.printStackTrace();
    };
    return bitmap;
};

public final class QRCodeEncoder {
private static final int WHITE = 0xFFFFFFFF;
private static final int BLACK = 0xFF000000;

private int dimension = Integer.MIN_VALUE;
private String contents = null;
private String displayContents = null;
private String title = null;
private BarcodeFormat format = null;
private boolean encoded = false;

public QRCodeEncoder(String data, Bundle bundle, String type, String format, int dimension) {
    this.dimension = dimension;
    encoded = encodeContents(data, bundle, type, format);
}

public String getContents() {
    return contents;
}

public String getDisplayContents() {
    return displayContents;
}

public String getTitle() {
    return title;
}

private boolean encodeContents(String data, Bundle bundle, String type, String formatString) {
    // Default to QR_CODE if no format given.
    format = null;
    if (formatString != null) {
        try {
            format = BarcodeFormat.valueOf(formatString);
        } catch (IllegalArgumentException iae) {
            // Ignore it then
        }
    }
    if (format == null || format == BarcodeFormat.QR_CODE) {
        this.format = BarcodeFormat.QR_CODE;
        encodeQRCodeContents(data, bundle, type);
    } else if (data != null && data.length() > 0) {
        contents = data;
        displayContents = data;
        title = "Text";
    }
    return contents != null && contents.length() > 0;
}

private void encodeQRCodeContents(String data, Bundle bundle, String type) {
    if (type.equals(Contents.Type.TEXT)) {
        if (data != null && data.length() > 0) {
            contents = data;
            displayContents = data;
            title = "Text";
        }
    } else if (type.equals(Contents.Type.EMAIL)) {
        data = trim(data);
        if (data != null) {
            contents = "mailto:" + data;
            displayContents = data;
            title = "E-Mail";
        }
    } else if (type.equals(Contents.Type.PHONE)) {
        data = trim(data);
        if (data != null) {
            contents = "tel:" + data;
            displayContents = PhoneNumberUtils.formatNumber(data);
            title = "Phone";
        }
    } else if (type.equals(Contents.Type.SMS)) {
        data = trim(data);
        if (data != null) {
            contents = "sms:" + data;
            displayContents = PhoneNumberUtils.formatNumber(data);
            title = "SMS";
        }
    } else if (type.equals(Contents.Type.CONTACT)) {
        if (bundle != null) {
            StringBuilder newContents = new StringBuilder(100);
            StringBuilder newDisplayContents = new StringBuilder(100);

            newContents.append("MECARD:");

            String name = trim(bundle.getString(ContactsContract.Intents.Insert.NAME));
            if (name != null) {
                newContents.append("N:").append(escapeMECARD(name)).append(';');
                newDisplayContents.append(name);
            }

            String address = trim(bundle.getString(ContactsContract.Intents.Insert.POSTAL));
            if (address != null) {
                newContents.append("ADR:").append(escapeMECARD(address)).append(';');
                newDisplayContents.append('\n').append(address);
            }

            Collection<String> uniquePhones = new HashSet<String>(Contents.PHONE_KEYS.length);
            for (int x = 0; x < Contents.PHONE_KEYS.length; x++) {
                String phone = trim(bundle.getString(Contents.PHONE_KEYS[x]));
                if (phone != null) {
                    uniquePhones.add(phone);
                }
            }
            for (String phone : uniquePhones) {
                newContents.append("TEL:").append(escapeMECARD(phone)).append(';');
                newDisplayContents.append('\n').append(PhoneNumberUtils.formatNumber(phone));
            }

            Collection<String> uniqueEmails = new HashSet<String>(Contents.EMAIL_KEYS.length);
            for (int x = 0; x < Contents.EMAIL_KEYS.length; x++) {
                String email = trim(bundle.getString(Contents.EMAIL_KEYS[x]));
                if (email != null) {
                    uniqueEmails.add(email);
                }
            }
            for (String email : uniqueEmails) {
                newContents.append("EMAIL:").append(escapeMECARD(email)).append(';');
                newDisplayContents.append('\n').append(email);
            }

            String url = trim(bundle.getString(Contents.URL_KEY));
            if (url != null) {
                // escapeMECARD(url) -> wrong escape e.g. http\://zxing.google.com
                newContents.append("URL:").append(url).append(';');
                newDisplayContents.append('\n').append(url);
            }

            String note = trim(bundle.getString(Contents.NOTE_KEY));
            if (note != null) {
                newContents.append("NOTE:").append(escapeMECARD(note)).append(';');
                newDisplayContents.append('\n').append(note);
            }

            // Make sure we've encoded at least one field.
            if (newDisplayContents.length() > 0) {
                newContents.append(';');
                contents = newContents.toString();
                displayContents = newDisplayContents.toString();
                title = "Contact";
            } else {
                contents = null;
                displayContents = null;
            }

        }
    } else if (type.equals(Contents.Type.LOCATION)) {
        if (bundle != null) {
            // These must use Bundle.getFloat(), not getDouble(), it's part of the API.
            float latitude = bundle.getFloat("LAT", Float.MAX_VALUE);
            float longitude = bundle.getFloat("LONG", Float.MAX_VALUE);
            if (latitude != Float.MAX_VALUE && longitude != Float.MAX_VALUE) {
                contents = "geo:" + latitude + ',' + longitude;
                displayContents = latitude + "," + longitude;
                title = "Location";
            }
        }
    }
}

public Bitmap encodeAsBitmap() throws WriterException {
    if (!encoded) return null;

    Map<EncodeHintType, Object> hints = null;
    String encoding = guessAppropriateEncoding(contents);
    if (encoding != null) {
        hints = new EnumMap<EncodeHintType, Object>(EncodeHintType.class);
        hints.put(EncodeHintType.CHARACTER_SET, encoding);
    }
    MultiFormatWriter writer = new MultiFormatWriter();
    BitMatrix result = writer.encode(contents, format, dimension, dimension, hints);
    int width = result.getWidth();
    int height = result.getHeight();
    int[] pixels = new int[width * height];
    // All are 0, or black, by default
    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 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;
}

private  String trim(String s) {
    if (s == null) { return null; }
    String result = s.trim();
    return result.length() == 0 ? null : result;
}

private String escapeMECARD(String input) {
    if (input == null || (input.indexOf(':') < 0 && input.indexOf(';') < 0)) { return input; }
    int length = input.length();
    StringBuilder result = new StringBuilder(length);
    for (int i = 0; i < length; i++) {
        char c = input.charAt(i);
        if (c == ':' || c == ';') {
            result.append('\\');
        }
        result.append(c);
    }
    return result.toString();
}