精华内容
下载资源
问答
  • 在项目中要用到jsp页面实现网页采集摄像头图像,并实现上传的功能,页面主要js调用的,所以可以使用多种语言php,asp等都可以使用,而且是跨浏览器的。可以整合的到SSH项目中和struts1或者struts2项目中使用方法1:...

    在项目中要用到jsp页面实现网页采集摄像头图像,并实现上传的功能,页面主要js调用的,所以可以使用多种语言php,asp等都可以使用,而且是跨浏览器的。

    可以整合的到SSH项目中和struts1或者struts2项目中

    使用方法1:

    下载 printscreen4web-jsp.war(最下面有下载地址),然后放到tamcat目录webapp文件夹下面,启动tomcat,访问http://127.0.0.1:8080/printscreen4web-jsp/

    主要调用文件 :1.index.html.2avatar.jsp

    String imagepath1="";

    //编辑页面中包含 camera.swf 的 HTML 代码

    public String renderHtml(String id,String basePath,String input)

    {

    String outinput="";

    try {

    outinput = URLDecoder.decode(input);

    }catch(Exception e)

    {

    System.out.println("解码错误!");

    }

    String[] tmp_input=outinput.split("@");//input传递的类型和uid

    //System.out.println(input+","+tmp_input.length);

    String uc_api =URLEncoder.encode(basePath+"upload/avatar.jsp");

    String urlCameraFlash = "camera.swf?nt=1&inajax=1&appid=1&input="+input+"&uploadSize=1000&ucapi="+uc_api;

    urlCameraFlash = "";

    return urlCameraFlash;

    }

    public String getFileExt(String fileName) {

    // 下面取到的扩展名错误,只有三位,而如html的文件则有四位

    // extName = fileName.substring(fileName.length() - 3, fileName.length()); //扩展名

    int dotindex = fileName.lastIndexOf(".");

    String extName = fileName.substring(dotindex, fileName.length());

    extName = extName.toLowerCase(); //置为小写

    return extName;

    }

    private byte[] getFlashDataDecode(String src)

    {

    char []s=src.toCharArray();

    int len=s.length;

    byte[] r = new byte[len / 2];

    for (int i = 0; i < len; i = i + 2)

    {

    int k1 = s[i] - 48;

    k1 -= k1 > 9 ? 7 : 0;

    int k2 = s[i + 1] - 48;

    k2 -= k2 > 9 ? 7 : 0;

    r[i / 2] = (byte)(k1 << 4 | k2);

    }

    return r;

    }

    public boolean saveFile(String path,byte[]b){

    try{

    FileOutputStream fs = new FileOutputStream(path);

    fs.write(b, 0, b.length);

    fs.close();

    return false;

    }catch(Exception e){

    return true;

    }

    }

    %>

    String uploadtype= request.getParameter("uploadtype");

    //图片上传类型:头像,logo,图片分别对应参数:head,logo,pic没有传递,默认为PIC

    if("".equals(uploadtype))

    {

    uploadtype="pic";

    }

    //最终裁剪好的图片存放位置

    String uid=request.getParameter("uid");

    imagepath1=uploadtype+"/"+uid+"_big.jpg";

    String action= request.getParameter("a");

    //String input=request.getParameter("input");

    String path = request.getContextPath();

    String infoFilePath="";

    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

    if(action==null){

    %>

    body{

    margin: 0;

    border: 0;

    }

    function updateavatar() {

    var img1="";

    if(window.opener.document.getElementById("imgpath1"))

    {

    window.opener.document.getElementById("imgpath1").value=img1;

    window.opener.document.getElementById("showimg1").src="upload/"+img1;

    }

    window.close();

    }

    out.print(renderHtml("5",basePath,URLEncoder.encode(uploadtype+"@"+uid)));

    %>

    }else if("uploadavatar".equals(action)){//上传临时图片,可以自己实现

    //System.out.println(action);

    UploadUtil uploadUtil = new UploadUtil();

    boolean isOk = uploadUtil.initParam(pageContext,request);

    if (isOk == false)

    {

    System.out.println("页面出错:" + uploadUtil.getMsg());

    return;

    }

    //上传附件

    isOk = uploadUtil.uploadFile("");

    if (isOk == false)

    {

    System.out.println("页面出错:" + uploadUtil.getMsg());

    return;

    }

    Map map = uploadUtil.getUploadFiles();

    if (map == null)

    {

    System.out.println("页面出错:上传附件失败");

    }

    if (map.size() == 0)

    {

    System.out.println("页面出错:没有上传附件");

    return;

    }

    //获取附件文件名和存储文件路径

    for (Iterator iter = map.keySet().iterator(); iter.hasNext();)

    {

    infoFilePath = (String) iter.next();

    String infoFileName = (String) map.get(infoFilePath);

    //infoFilePath=infoFilePath.substring(infoFilePath.lastIndexOf("\\")+1);

    //System.out.println(infoFilePath);

    //infoFilePath=infoFilePath.substring(infoFilePath.indexOf("webapps")+8);

    infoFilePath=infoFilePath.replaceAll("\\\\", "/");

    //System.out.println(basePath+"upload"+infoFilePath);

    out.clear();

    out.print(basePath+"upload"+infoFilePath);

    }

    }else if("rectavatar".equals(action)){//缩略图

    String avatar1 = request.getParameter("avatar1");//大

    String avatar2 = request.getParameter("avatar2");//中

    String avatar3 = request.getParameter("avatar3");//小

    String output ="";

    try {

    output = URLDecoder.decode(request.getParameter("input"));

    }catch(Exception e)

    {

    System.out.println("解码错误!");

    }

    String[] tmp_input=output.split("@");//input传递的类型和uid

    String pathff = request.getSession().getServletContext().getRealPath("/")+ "upload\\";

    String imgfilepath=pathff+tmp_input[0];

    imagepath1=imgfilepath+"/"+tmp_input[1]+"_big.jpg";

    out.clear();

    boolean a1=saveFile(imagepath1,getFlashDataDecode(avatar1));

    if(a1){

    out.print("<?xml version=\"1.0\" ?>");

    }else{

    out.print("<?xml version=\"1.0\" ?>");

    }

    }

    %>

    d13d3c0d53bf8f7a190cc72abfff724f.png

    a5e401916f145d22dadeda93e24d845f.png

    展开全文
  • Camera.open打开摄像头报错 java.lang.RuntimeException: Fail to connect to camera service 在Android 6.0或以上系统中,先检查AndroidManifest有没有设置权限 Android6.0及以上系统中需要动态权限申请。 接下来...

    Camera.open打开摄像头报错 java.lang.RuntimeException: Fail to connect to camera service
    在Android 6.0或以上系统中,先检查AndroidManifest有没有设置权限

    Android6.0及以上系统中需要动态权限申请。
    接下来本文通过Android原生API、EasyPermissions框架、RxPermissions框架等三种方式介绍怎么在开发过程中动态申请危险权限。

    以下内容转自https://www.jianshu.com/p/20ebbafe3189

    一、原生API实现动态权限申请
    1、判断是否拥有权限,使用ActivityCompat类中的checkSelfPermission方法,仅支持检测单个权限,如果需要检测多个权限,则使用逻辑运算符实现,这里以检测是否具有写存储空间权限和相机权限为例:

    if (!(ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED){
        //没有权限,申请权限
     	 String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA};
    	 //申请权限,其中RC_PERMISSION是权限申请码,用来标志权限申请的
    		ActivityCompat.requestPermissions(MainActivity.this,permissions, RC_PERMISSION);
    	}else {
           //拥有权限
    }
    

    申请权限的结果我们可以在onRequestPermissionsResult方法中进行分析

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    
          if (requestCode == RC_PERMISSION && grantResults.length == 2
                  && grantResults[0] == PackageManager.PERMISSION_GRANTED
                  && grantResults[1] == PackageManager.PERMISSION_GRANTED) {
              Log.e(TAG, "权限申请成功");
          }else {
              Log.e(TAG, "权限申请失败");
          }
    }
    

    参数解释

    requestCode:权限申请码,标志是哪次权限申请
    permissions:申请权限的字符串数组
    grantResults:权限申请的结果,是一个整型数组,这个数组的长度就是申请权限的个数,并且数组元素就是对应每个权限的申请结果
    2、用户点击“不再提醒”处理
    在权限申请过程中,如果第一次权限申请被用户拒绝了,那么第二次申请该权限的时候,在权限申请框上会出现一个“不再询问”的勾选,如果用户勾选了这个选项并拒绝的时候,那以后每次申请权限都直接返回权限拒绝
    点击了不再提示之后,权限申请时不会再弹出权限申请提示框了,而是直接返回失败,在这种情况下,我们应该引导用户去设置里把权限打开,但是android API中并没有判断用户是否勾选了“不再询问”的监听,那我们开发者怎么去判断用户是否勾选了“不再询问”呢?
    这个可以通过shouldShowRequestPermissionRationale(),这个访问的作用是是否需要向用户解释为何需要申请该权限,当首次申请权限时,该方法返回false,第二次申请权限会返回true。当第二次申请权限并且用户勾选了“不再询问”时该方法返回的是false,因此我们可以推导出,如果用户第二次申请权限被拒绝并且shouldShowRequestPermissionRationale()返回false,那么用户一定是勾选了不再询问,接下来可以通过以下代码引导用户前往设置页面打开权限:

    new AppSettingsDialog.Builder(this)
                        .setTitle("权限申请")
                        .setRationale("应用程序运行缺少必要的权限,请前往设置页面打开")
                        .setPositiveButton("去设置")
                        .setNegativeButton("取消")
                        .setRequestCode(RC_SETTINGS_SCREEN)
                        .build()
                        .show();
    /**
    *从设置页面返回,可以再次检查权限是否已打开
    */
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
    
        if (requestCode == AppConstants.RC_SETTINGS_SCREEN) {
            // Do something after user returned from app settings screen, like showing a Toast.
            LG.e("权限申请结果: 从设置页面返回");
        }
    }
    

    三、权限申请框架EasyPermissions简单使用
    EasyPermissions是Google官方推荐的简化权限申请的第三方框架,下面简单介绍该框架的使用:
    首先先在项目中添加依赖:
    implementation ‘pub.devrel:easypermissions:2.0.0’

    1.检查是否拥有权限
    String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE,
    Manifest.permission.CAMERA};
    boolean hasPermissions = EasyPermissions.hasPermissions(EasyPermissionActivity.this, permissions);
    if (hasPermissions) {
    //拥有权限
    }else {
    //没有权限
    }

    2.申请权限

    首先重写onRequestPermissionsResult方法,将权限申请结果交给EasyPermissions处理

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        //Forward results to EasyPermissions
        EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
    }
    

    让Activity或者是Fragment实现EasyPermissions.PermissionCallbacks接口,实现这个接口的onPermissionsGranted和onPermissionsDenied方法,这两个方法是EasyPermissions处理权限申请结果的回调

    @Override
    public void onPermissionsGranted(int requestCode, @NonNull List<String> perms) {
    
    }
    
    @Override
    public void onPermissionsDenied(int requestCode, @NonNull List<String> perms) {
        if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {
            //用户勾选了“不再询问”,引导用户去设置页面打开权限
            new AppSettingsDialog.Builder(this)
                    .setTitle("权限申请")
                    .setRationale("应用程序运行缺少必要的权限,请前往设置页面打开")
                    .setPositiveButton("去设置")
                    .setNegativeButton("取消")
                    .setRequestCode(RC_SETTINGS_SCREEN)
                    .build()
                    .show();
        }
    }
    
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
    
        if (requestCode == RC_SETTINGS_SCREEN) {
            //用户从设置页面返回,可以在这里检测用户是否打开了权限
        }
    }
    

    在需要申请权限的地方调用以下方法

    @AfterPermissionGranted(RC_PERMISSIONS)
    private void requestStoreAndCameraPermission() {
        String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA};
        if (EasyPermissions.hasPermissions(this, permissions)) {
            //权限获取成功
        }else {
            //没有权限,调用方法申请权限
            EasyPermissions.requestPermissions(this, "程序运行需要存储权限和相机权限", RC_PERMISSIONS, permissions);
        }
    }
    

    添加AfterPermissionGranted注解的作用是,当权限申请成功之后,系统会自动调用一次该方法,这样会直接走权限获取成功的业务逻辑;
    EasyPermissions.requestPermissions方法的第二个参数的意义是当用户第一次拒绝了权限之后,第二次调用该方法获取权限时,会先弹出一个对话框向用户解释为何需要该权限,对话框的内容就是这个参数(弹出的对话框样式在这里无法自己定义)
    三、权限申请框架RxPermissions简单使用
    RxPermissions也是一款比较好用的权限申请框架,可以搭配着RxJava等一起使用,RxPermissions没有检测是否拥有权限的api,使用的时候是直接调用申请权限的方法。

    首先引入RxPermissions依赖包

    //项目Project的build.gradle文件
    allprojects {
    repositories {

    maven { url ‘https://jitpack.io’ }
    }
    }

    //模块app的build.gralde文件
    dependencies {
    implementation ‘com.github.tbruyelle:rxpermissions:0.10.2’
    }

    申请单个权限,这个方法没有处理用户勾选“不再询问”的处理

        RxPermissions rxPermissions = new RxPermissions(this);
        rxPermissions.request(Manifest.permission.CAMERA)
                .subscribe(granted -> {
                    if (granted) {
                        //拥有权限,在系统版本小于M时granted恒为true
                    } else {
                        //权限拒绝
                    }
                });
    

    申请多个权限,并且每个权限申请的结果分别返回

        RxPermissions rxPermissions = new RxPermissions(this);
        //在这里申请两个权限,两个申请结果分别返回,即回调两次
        rxPermissions.requestEach(Manifest.permission.WRITE_EXTERNAL_STORAGE,
                Manifest.permission.CAMERA)
                .subscribe(permission -> {
                    if (permission.granted) {
                        //获得权限成功
                    } else if (permission.shouldShowRequestPermissionRationale) {
                        //获取权限失败,但是用户没有勾选”不再询问“,在这里应该弹出对话框向用户解释为何需要该权限
                    }else {
                        //权限申请失败,用户勾选了“不再询问”,在这里应该引导用户去设置页面打开权限
                    }
                });
    

    申请多个权限,并且所有权限结果统一为一个返回,即要不返回成功,要不失败

        RxPermissions rxPermissions = new RxPermissions(this);
        rxPermissions.requestEachCombined(Manifest.permission.WRITE_EXTERNAL_STORAGE,
                Manifest.permission.CAMERA)
                .subscribe(permission -> {   //只回调一次
                    if (permission.granted) {
                        //全部权限获取成功
                    } else if (permission.shouldShowRequestPermissionRationale) {
                        //至少一个权限获取失败,但是用户没有勾选”不再询问“,在这里应该弹出对话框向用户解释为何需要该权限
                    }else {
                        //至少一个权限申请失败,用户勾选了“不再询问”,在这里应该引导用户去设置页面打开权限
                    }
                });
    

    四、总结
    本文记录了三种方式进行android 6.0动态权限申请,但是目前我比较常用的是RxPermissions 这个库,使用起来比较简便,而且也可以对用户勾选“不再询问”的操作进行处理。

    展开全文
  • at com.instapp.nat.weex.plugin.Camera.Camera.realCaptureImage(Camera.java:59) at com.instapp.nat.weex.plugin.Camera.Camera.captureImage(Camera.java:53) ... 11 more </code></pre>该提问来源于开源项目...
  • Camera.java--->Camera.java(framework)--->android_hardware_camera.cpp(jni)---->Camera.cpp--->ICameraService ---(通过binder机制)---->CameraService.cpp---->CameraHardwareInterface.h->QualcommCamera->...
  • 【Android】小米手机 使用调用 Camera

    千次阅读 2017-05-24 22:13:09
    Android 调用Camera(Camera camera = Camera.open(0))时一直报错: 问题: java.lang.RuntimeException: Fail to connect to camera service 1.权限已经添加 在AndroidManifest.xml中申请权限 2.调用...

    Android 调用Camera(Camera camera = Camera.open(0))时一直报错:

    问题: java.lang.RuntimeException: Fail to connect to camera service

    1.权限已经添加

    在AndroidManifest.xml中申请权限

    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.FLASHLIGHT" />

    2.调用接口的修改

    Camera camera = Camera.open(0);
    对于参数问题,可选择的值为:[0, getNumberOfCameras()-1], 干脆写作0,肯定没问题的了。


    对于调用肯定没问题了,还是报错,有文章说是Android6.0增加了动态权限,还未确认。看到网上很多人遇到和我一样的问题,下面给我最终解决方法:

    1.上面的权限和调用依然需要

    2.在手机的【设置】-》【更多应用】-》【你的应用名】-》【权限管理】-》【多媒体相关】-》【相机】后面的的问号,点亮(绿色+箭头)。


    至于动态的权限申请,后面深究。

    展开全文
  • if (params.getSupportedFocusModes().contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE)) { params.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE); } mCamera.set...
  • Caused by: java.lang.SecurityException: Permission Denial: starting Intent { act=android.media.action.IMAGE_CAPTURE flg=0x3 mCallingUid=10129 cmp=com.android.camera/.CameraActivityWraper clip=...

    崩溃报错如下:
    Caused by: java.lang.SecurityException: Permission Denial: starting Intent { act=android.media.action.IMAGE_CAPTURE flg=0x3 mCallingUid=10129 cmp=com.android.camera/.CameraActivityWraper clip={text/uri-list U:file:///storage/emulated/0/msf/msf_pic_1494294113257.jpg} (has extras) } from ProcessRecord{c77e08f 25156:com.yianju/u0a129, isShadow:false} (pid=25156, uid=10129) with revoked permission android.permission.CAMERA
    --------------------- 
     

    崩溃原因:在manifest里定义了两个相同的permission,去掉一个即可,注意:例如你的项目叫app,依赖了A工程,如果这两个工程都需要一个perssion,那么在app里和A里只需要写一个perssion,而不是app和A里都写一个.

    <uses-permission android:name="android.permission.CAMERA" />
    展开全文
  • 1,通过intent调用camera [code="java"] Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); File photo = new File(Environment.getExternalStorageDirectory(), ...
  • Android 调用camera2 人脸识别api

    千次阅读 2018-01-06 21:40:24
    拍照预览时进行人脸识别,结果返回给callback函数Preview.javatry { mCamera.setPreviewDisplay(mHolder); if(mOnFaceDetected != null){ mCamera.setFaceDetectionListener(mOnFaceDetected
  • 调用Camera,然后指定自己定义的保存路径,结果返回的Intent为空。我们来分析一下原因。 分析 首先看Camera的部分逻辑,在源代码中的Camera.java的doAttach()方法里面。 // First handle the no crop ...
  • 推荐一个JAR包 FOR 64位windows7 的调用摄像头。
  • 1. Camera Camera是Android framework里面支持的,同意你拍照和拍摄视频的设备,那么,在使用camera开发...E/AndroidRuntime(1542): java.lang.RuntimeException: setParameters failed E/AndroidRuntime(1542): ...
  •    首先是布局文件,线性布局,左边两个按钮垂直摆放,...Java代码   "1.0" encoding="utf-8"?> "http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" androi
  • 调用系统Camera

    2015-11-24 15:11:03
    package com.example.mcamera; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import android.net.Uri; import android.os.Bu
  • 最近再搞人脸识别,用OpenCV框架调用摄像头的时候分辨率老是调整不过来 默认好像是640*480 太小刚开始以为是Bufferimage初始化的问题 获取到的bf格式总也不变最后发现是方向搞错了..花了点时间终于搞定了...
  • Android调用系统camera

    2014-04-29 22:26:12
    package com.example.day10_camera; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.text.SimpleDateFormat; import java
  • Camera framwork调用结构

    2016-11-14 11:18:24
    Java层:Camera类 client调用server端: framework/base/core/jni/android_...主要包含了camera java层需要调用下层的所有接口 setup startpreview takepicture setparams等等 JNI层主要调用framework/av/camera/C
  • Android Camera调用流程

    万次阅读 2016-02-22 18:19:23
    一个流程图画的非常好的文章http://blog.csdn.net/lushengchu_luis/article/details/110330951、Packages/..../packages/apps/Camera/src/com/android/camera/Camera.java 进来第一个肯定是onCreate(Bundle icicle) {
  • 小白出品,可搬可参,yuv2rgb效率一般(640*480 以下应该还可以接受),请自行更换算法。 ... 测试工具:Eclipse+Unity Java: PreviewMode.java: ...package wjt.camera.plugin; public class PreviewMode ...
  • java swing界面调用本地摄像头,demo可以直接导入eclipse运行,直接运行CameraFrame.java即可。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 415
精华内容 166
关键字:

java调用camera

java 订阅