我有一个读取java中条形码的代码,如果图像只包含条形码,它工作得非常好,但如果我尝试读取图像形式的条形码,它不起作用。但是,如果我corp条码图像并粘贴并创建新的图像它正在工作。如何在java中读取tif图像的条形码
从上面的场景中我发现如果图像只包含条形码,代码工作正常,但如果它包含其他一些数据,则会失败。
请在下面找到我用来阅读条形码的代码。
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();
}
}
但上述代码不起作用。请告知如何以图像形式阅读条形码。
问候, PISE
你有任何的堆栈跟踪?因为创建一个包含条形码区域的缓冲区应该可以得到与自己裁剪图像相同的结果。 – Brugere
嗨Brugere,第一个代码我得到com.google.zxing.NotFoundException和第二个代码我在线程“主”java.awt.image.RasterFormatException异常获得异常:y位于栅格之外 – pise
你可以尝试添加一个异常捕获与最通用的类型和打印结果?也许这是另一个例外发生。 – Brugere