我创建了一个简单的相机应用程序,并从browser()启动它,以便从多个相机选项中拍照(如果我选择默认相机或第三方相机(打开相机,youcam ..),则将数据返回浏览器,如果我选择相机不返回数据。
图像选择器发生了同样的事情。
public class MainActivity extends Activity implements SurfaceHolder.Callback {
private Button btnCapture;
private SurfaceView surfaceView;
private Camera camera;
private SurfaceHolder surfaceHolder;
private Camera.PictureCallback pictureCallback;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
surfaceView = findViewById(R.id.surfaceView);
btnCapture = findViewById(R.id.btnCapture);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this);
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
btnCapture.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
camera.takePicture(null, null, pictureCallback);
}
});
pictureCallback = new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length);
Bitmap cbmp = Bitmap.createBitmap(bmp,0, 0, bmp.getWidth(), bmp.getHeight(), null, true);
String fileName = currentDateFormat();
storePhotoToStorage(cbmp, fileName);
Toast.makeText(getApplicationContext(), "success..!", Toast.LENGTH_LONG).show();
// MainActivity.this.camera.startPreview();
}
};
}
private String currentDateFormat() {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd_HH_mm_ss");
String currentTime = dateFormat.format(new Date());
return currentTime;
}
private void storePhotoToStorage(Bitmap cbmp, String fileName){
File outputFile = new File(Environment.getExternalStorageDirectory(), "/DCIM/"+"photo_"+fileName+".jpg");
try {
FileOutputStream fileOutputStream = new FileOutputStream(outputFile);
cbmp.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream);
fileOutputStream.flush();
fileOutputStream.close();
} catch (FileNotFoundException e){
e.printStackTrace();
} catch (IOException e){
e.printStackTrace();
}
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
try {
camera = Camera.open();
} catch (Exception e) {
e.printStackTrace();
}
Camera.Parameters parameters;
parameters = camera.getParameters();
parameters.setPreviewFrameRate(20);
parameters.setPictureSize(352, 288);
camera.setParameters(parameters);
camera.setDisplayOrientation(90);
try {
camera.setPreviewDisplay(surfaceHolder);
camera.startPreview();
} catch (IOException e){
e.printStackTrace();
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
camera.stopPreview();
camera.release();
camera = null;
}
}
```[
<!DOCTYPE html>
<html lang="en">
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.js"></script>
</head>
<body>
<input type="file" name="file" accept="image/*" onchange="readURL(this);" />
<br>
<br>
<br>
<br>
<img id="blah" src="http://placehold.it/180" alt="your image" width="180" height="180" />
<script>
console.log("asif");
function readURL(input) {
if (input.files && input.files[0]) {
var reader = new FileReader();
reader.onload = function (e) {
$('#blah')
.attr('src', e.target.result);
alert("--" + e.target.result);
};
reader.readAsDataURL(input.files[0]);
}
}
</script>
</body>
</html>
][1]
[1[\]][1]: https://i.stack.imgur.com/MuN2h.jpg
[1]: https://i.stack.imgur.com/tlKx6.jpg