我有一个在java中读取条形码的代码,如果图像只包含条形码,它工作得很好,但是如果我尝试以图像形式读取条形码,它就不起作用。但是,如果我将条形码图像合并并粘贴并创建新图像,它就可以工作。
从上面的场景中,我发现如果图像只包含条形码,则代码工作正常,但如果它也包含其他数据,那么它就会失败。
请在下面找到我用来读取条形码的代码。
package com.life;
import java.awt.image.BufferedImage;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import com.google.zxing.Reader;
import javax.imageio.ImageIO;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.ChecksumException;
import com.google.zxing.FormatException;
import com.google.zxing.LuminanceSource;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.NotFoundException;
import com.google.zxing.Result;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.common.HybridBinarizer;
public class BarcodeGeneration {
public static void main(String[] args) throws IOException {
InputStream barCodeInputStream = new FileInputStream("C:\\Destination\\AE973220_P01.TIF");
BufferedImage barCodeBufferedImage = ImageIO.read(barCodeInputStream);
LuminanceSource source = new BufferedImageLuminanceSource(barCodeBufferedImage);
BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
Reader reader = new MultiFormatReader();
Result result;
try {
result = reader.decode(bitmap);
Systemwhi.out.println("Barcode text is " + result.getText());
} catch (NotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ChecksumException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
有什么方法可以读取确切的图像位置,例如:仅使用 x 和 y 轴的图像中的条形码。
下面是我试图读取特定图像位置但没有工作的代码。
public static void main(String[] args) throws IOException {
try {
/*InputStream barCodeInputStream = new FileInputStream("C:/RinDestination/2012/12/2012-12-05/700466296/AE973220_P01.TIF");
BufferedImage barCodeBufferedImage = ImageIO.read(barCodeInputStream);
LuminanceSource source = new BufferedImageLuminanceSource(barCodeBufferedImage);*/
File imageFile=new File("C:/RinDestination/2012/12/2012-12-05/700466296/AD449293_P01.TIF" +
"");
BufferedImage image;
image = ImageIO.read(imageFile);
int height=image.getHeight();
System.out.println("height---"+height);
int width=image.getWidth();
System.out.println("width---"+width);
int minx=image.getTileHeight();
System.out.println("minx---"+minx);
int miny=image.getTileWidth();
System.out.println("miny---"+miny);
BufferedImage cropedImage = image.getSubimage(1654,-800,width,height );
LuminanceSource source = new BufferedImageLuminanceSource(cropedImage);
BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
Reader reader = new MultiFormatReader();
Result result;
result = reader.decode(bitmap);
System.out.println("Barcode text is " + result.getText());
// byte[] b = result.getRawBytes();
// System.out.println(ByteHelper.convertUnsignedBytesToHexString(result.getText().getBytes("UTF8")));
//System.out.println(ByteHelper.convertUnsignedBytesToHexString(b));
} catch (NotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ChecksumException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
但是上面的代码不起作用。请告知如何以图像形式读取条形码。
问候, 皮斯