java的springboot项目(若依前后端分离)利用webcam-capture调用照相机照相,并保存照片

简介: java的springboot项目(若依前后端分离)利用webcam-capture调用照相机照相,并保存照片

@[TOC]

1.需要的依赖

        <dependency>
            <groupId>com.github.sarxos</groupId>
            <artifactId>webcam-capture</artifactId>
            <version>0.3.12</version>
        </dependency>

2.新建CameraUtils工具类

package com.ruoyi.fangzhou.util;

import com.github.sarxos.webcam.Webcam;
import com.github.sarxos.webcam.WebcamPanel;
import com.github.sarxos.webcam.WebcamResolution;
import com.github.sarxos.webcam.WebcamUtils;
import com.github.sarxos.webcam.util.ImageUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

/**
 * 相机测试
 */
public class CameraUtils {
   
   

    public static final Logger logger = LoggerFactory.getLogger(CameraUtils.class);

    public static void openCamera() {
   
   
        //默认获取一个Webcam对象
        final Webcam webcam = Webcam.getDefault();
        //设置窗口大小
        webcam.setViewSize(WebcamResolution.VGA.getSize());
        //获取画板
        WebcamPanel panel = new WebcamPanel(webcam);
        //设置FPS显示
        panel.setFPSDisplayed(true);
        //设置debug日志
        panel.setDisplayDebugInfo(true);
        //设置显示图片尺寸
        panel.setImageSizeDisplayed(true);
        //设置镜像
        panel.setMirrored(true);

        //获取框架jdk
        JFrame window = new JFrame("照相机拍照");

        //框架中加入画板
        window.add(panel);
        //设置此帧是否可由用户调整大小
        window.setResizable(true);
        //调用任意已注册 WindowListener 的对象后自动隐藏并释放该窗体
        window.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        //自适应窗口
        window.pack();
        //设置窗口可见
        window.setVisible(true);
        //设置监听事件
        window.addWindowListener(new WindowListener() {
   
   

            @Override
            public void windowOpened(WindowEvent e) {
   
   

            }

            @Override
            public void windowClosing(WindowEvent e) {
   
   

            }

            @Override
            public void windowClosed(WindowEvent e) {
   
   
                //关闭摄像头
                webcam.close();
            }

            @Override
            public void windowIconified(WindowEvent e) {
   
   

            }

            @Override
            public void windowDeiconified(WindowEvent e) {
   
   

            }

            @Override
            public void windowActivated(WindowEvent e) {
   
   

            }

            @Override
            public void windowDeactivated(WindowEvent e) {
   
   

            }


        });

        final JButton button = new JButton("拍照");
        window.add(panel, BorderLayout.CENTER);
        window.add(button, BorderLayout.SOUTH);
        window.setResizable(true);
        window.pack();
        window.setVisible(true);
        button.addActionListener(new ActionListener() {
   
   
            public void actionPerformed(ActionEvent e)
            {
   
   

                button.setEnabled(false);  //设置按钮不可点击

                //实现拍照保存-------start
                String fileName = "E://picture//" + System.currentTimeMillis();       //保存路径即图片名称(不用加后缀)
                WebcamUtils.capture(webcam, fileName, ImageUtils.FORMAT_PNG);
                SwingUtilities.invokeLater(new Runnable() {
   
   

                    @Override
                    public void run()
                    {
   
   
                        JOptionPane.showMessageDialog(null, "拍照成功");
                        button.setEnabled(true);    //设置按钮可点击

                        return;
                    }
                });
                //实现拍照保存-------end

            }
        });
    }
}

3 main方法测试

public static void main(String[] args) {
   
   
        CameraUtils.openCamera();
    }

结果很好用!
在这里插入图片描述

目录
相关文章
|
5天前
|
Java 应用服务中间件
SpringBoot获取项目文件的绝对路径和相对路径
SpringBoot获取项目文件的绝对路径和相对路径
40 1
SpringBoot获取项目文件的绝对路径和相对路径
|
2天前
|
前端开发 Java 数据库
如何实现一个项目,小白做项目-java
本教程涵盖了从数据库到AJAX的多个知识点,并详细介绍了项目实现过程,包括静态页面分析、数据库创建、项目结构搭建、JSP转换及各层代码编写。最后,通过通用分页和优化Servlet来提升代码质量。
10 1
|
6天前
|
监控 前端开发 Java
Java SpringBoot –性能分析与调优
Java SpringBoot –性能分析与调优
|
7天前
|
JavaScript 前端开发 Java
SpringBoot项目的html页面使用axios进行get post请求
SpringBoot项目的html页面使用axios进行get post请求
25 2
|
7天前
|
前端开发 Java Spring
SpringBoot项目thymeleaf页面支持词条国际化切换
SpringBoot项目thymeleaf页面支持词条国际化切换
26 2
|
7天前
|
JSON Java 数据库
SpringBoot项目使用AOP及自定义注解保存操作日志
SpringBoot项目使用AOP及自定义注解保存操作日志
25 1
|
9天前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
9天前
|
关系型数据库 MySQL Java
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型
19 0
|
12天前
|
缓存 Java 程序员
Java|SpringBoot 项目开发时,让 FreeMarker 文件编辑后自动更新
在开发过程中,FreeMarker 文件编辑后,每次都需要重启应用才能看到效果,效率非常低下。通过一些配置后,可以让它们免重启自动更新。
20 0
|
8天前
|
安全 Java
java 中 i++ 到底是否线程安全?
本文通过实例探讨了 `i++` 在多线程环境下的线程安全性问题。首先,使用 100 个线程分别执行 10000 次 `i++` 操作,发现最终结果小于预期的 1000000,证明 `i++` 是线程不安全的。接着,介绍了两种解决方法:使用 `synchronized` 关键字加锁和使用 `AtomicInteger` 类。其中,`AtomicInteger` 通过 `CAS` 操作实现了高效的线程安全。最后,通过分析字节码和源码,解释了 `i++` 为何线程不安全以及 `AtomicInteger` 如何保证线程安全。
java 中 i++ 到底是否线程安全?