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