开发者社区> 问答> 正文

想从内存流中读取图片信息,求zxing内存流接口~~~~~:报错

想做一个网站根据提交图片识别解析二维码,想从内存流中读取图片信息,求zxing内存流接口~~~~~:报错

因为这个接口是文件路径,但是做网站不能这样读取,想直接从内存流中读取,求教大神应该这么做?~~~


public void testDecode()


{  
        String filePath = "k://zxing.png";  
        BufferedImage image;  
        try {  
            image = ImageIO.read(new File(filePath));  
            LuminanceSource source = new BufferedImageLuminanceSource(image);  
            Binarizer binarizer = new HybridBinarizer(source);  
            BinaryBitmap binaryBitmap = new BinaryBitmap(binarizer);  
            Map<DecodeHintType, Object> hints = new HashMap<DecodeHintType, Object>();  
            hints.put(DecodeHintType.CHARACTER_SET, "UTF-8");  
            Result result = new MultiFormatReader().decode(binaryBitmap, hints);// 对图像进行解码 
            JSONObject content = JSONObject.fromObject(result.getText()); 
            System.out.println("图片中内容:  ");  
            System.out.println("author: " + content.getString("author"));  
            System.out.println("zxing:  " + content.getString("zxing"));  
            System.out.println("图片中格式:  ");  
            System.out.println("encode: " + result.getBarcodeFormat());  
            
            
            
            
            
        }
        catch (IOException e) 
        {  
            e.printStackTrace();  
        } 
        catch (NotFoundException e)
        {  
            e.printStackTrace();  
        }  





    }  


展开
收起
kun坤 2020-06-07 12:48:56 681 0
1 条回答
写回答
取消 提交回答
  • 求大神~~######

    public static void main(String []args)throws Exception{
    String text = "你好";
    int width = 100;
    int height = 100;
    String format = "png";
    Hashtable hints= new Hashtable();
    hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
    BitMatrix bitMatrix = new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE, width, height,hints);
    File outputFile = new File("new.png"); //这里你可以通过socket接收流数据,拼装成图片,参考二代码 MatrixToImageWriter.writeToFile(bitMatrix, format, outputFile);

    }   
    

    二: package cn.cctv.net;
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    public class ImageRequest {
    /** * @param args */
    public static void main(String[] args) throws Exception {
    //new一个URL对象
    URL url = new URL("http://img.hexun.com/2011-06-21/130726386.jpg");
    //打开链接
    HttpURLConnection conn = (HttpURLConnection)url.openConnection();
    //设置请求方式为"GET"
    conn.setRequestMethod("GET");
    //超时响应时间为5秒
    conn.setConnectTimeout(5 * 1000);
    //通过输入流获取图片数据
    InputStream inStream = conn.getInputStream();
    //得到图片的二进制数据,以二进制封装得到数据,具有通用性
    byte[] data = readInputStream(inStream);
    //new一个文件对象用来保存图片,默认保存当前工程根目录
    File imageFile = new File("BeautyGirl.jpg");
    //创建输出流
    FileOutputStream outStream = new FileOutputStream(imageFile);
    //写入数据
    outStream.write(data);
    //关闭输出流
    outStream.close();
    }
    public static byte[] readInputStream(InputStream inStream) throws Exception{
    ByteArrayOutputStream outStream = new ByteArrayOutputStream();
    //创建一个Buffer字符串
    byte[] buffer = new byte[1024];
    //每次读取的字符串长度,如果为-1,代表全部读取完毕
    int len = 0;
    //使用一个输入流从buffer里把数据读取出来
    while( (len=inStream.read(buffer)) != -1 ){
    //用输出流往buffer里写入数据,中间参数代表从哪个位置开始读,len代表读取的长度
    outStream.write(buffer, 0, len);
    }
    //关闭输入流
    inStream.close();
    //把outStream里的数据写入内存
    return outStream.toByteArray();
    }
    }



    ######谢谢您的回答~,我想做一个图片不用存储在服务器上,解析完生成内容字符串后,直接自动删除缓存的方法~######可以使用apache中的FileUtils.copy方法。来完成流copy,生成一个文件,然后你读取这个文件生成二维码。生成完毕后,删除刚才生成的这个文件即可。######谢谢您的回答,我试试~######我以前也打算做个,发现开源中国有这工具,就没做了######回复 @斯乌和凹 : web端没开源,只有移动端开源了######回复 @beastxiao : 请问这个源码什么的能下载吗?######回复 @beastxiao : 谢谢大神~~######http://tool.oschina.net/qr?type=2######谢谢你~求连接或者项目名称啊,不好意思没找到~
    2020-06-07 12:49:08
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
内存取证与IaaS云平台恶意行 为的安全监控 立即下载
云服务器ECS内存增强型实例re6全新发布 立即下载
HBase2.0重新定义小对象实时存取 立即下载