Ⅰ 前端使用input选择图片(多张)仅提供思路
1.首先前端用input调用android相册,不能选择多张图,需要Android原生调用选择图片界面(非系统相册),可以选择PictureSelector框架。
在build.gradle中引入
// glide加载图片
implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.2.3'
//glide版本慎用,高版本会导致闪退,具体参考github上的文件
implementation'com.github.bumptech.glide:glide:4.5.0'
2.在丛则webview中使用(可以直接调用相机setselectorPhoto)
3.选择照帆郑册片后得到数据
4.最后转化uri数组给前端(方法直接复制)
/*2.得到文件地址传递态宏前端*/
@SuppressWarnings("null")
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void onActivityResultAboveL(int requestCode,int resultCode, Intent data) {
if (requestCode != PictureConfig.CHOOSE_REQUEST
||mUploadCallbackAboveL ==null) {
return;
}
Uri[] results =null;
Uri uriData =null;
ArrayList uridatas =new ArrayList<>();
if (resultCode == Activity.RESULT_OK) {
if (data ==null) {
results =new Uri[]{imageUri};
}else {
// 3。得到文件地址集合
selectList = PictureSelector.obtainMultipleResult(data);
// 4。遍历转化uri,添加到uri集合
for (int i =0; i
uriData = Uri.fromFile(new File(selectList.get(i).getPath()));
uridatas.add(i, uriData);
}
// 5.uri集合转数组
results = (Uri[]) uridatas.toArray(new Uri[selectList.size()]);
}
if (results !=null) {
// 6.上传前端
mUploadCallbackAboveL.onReceiveValue(results);
mUploadCallbackAboveL =null;
}else {
results =new Uri[]{imageUri};
mUploadCallbackAboveL.onReceiveValue(results);
mUploadCallbackAboveL =null;
}
}else {
mUploadCallbackAboveL.onReceiveValue(null);
}
mUploadCallbackAboveL =null;
}
Ⅱ html5或者JS怎样调用手机摄像头或者相册
你给的网页用的是 <input accept="image/*" type="file">,在IOS端点击时会提示选择图片或相机,安卓端要看浏览器对这两个属性的优化,部分浏览器会直接跳转到资源管理器,优化做得好的可以直接提示选择相册或相机。
Ⅲ 前端 h5手机端视频录制
ios系统要使用input 调用本地摄像,下面是调起录像的。
<input type="file" name="video" id="video-input" accept="video#zs#" capture="user" onchange="videoChange()" />
Ⅳ 前端开发遇到的问题与怎么解决的
最终解决方法:愿化蝶飞向,注定是错觉,前端开发遇题与解决只是,不要高估情的美。,对方留下各种各样的印记。中间的小邪送出了。对每个人微笑。
Ⅳ H5前端调用摄像头拍照
就需求本身而言,若是交给Native同事去蔽野开发,就是一个自定义相机的功能。可能要看怎么阻止系统拍摄照片后不进手机系统相册。
对于此需求若是前端来实现的话,也可以实现。大概就是调起摄像头后,获取当前画面,然后截取当前帧的画面,转换成图片保存。基本步骤如下:
【 思路问题不大,但是实际这样开发时,还会有以下几个问题: 】
1. 交互神禅体验不好
window.navigator.mediaDevices.getUserMedia浏览器BOM api时,需要用户手动点击确认,允许打开摄像头。游并尘交互体验不太好。
2. 画面画质问题
前端实现本质上和截图差不多,画面质量没有原生拍照效果好。
3. 浏览器API mediaDevices为undefined问题
window.navigator.mediaDevices在非以下三种情况下时,会为undefined,所以当为非https的域或者非本地localhost域,则都无法使用。
a. localhost 域
b. 开启了 HTTPS 的域
c. 使用 file:/// 协议打开的本地文件
【若想在http下也可使用,怎么办???】
通过设置chrome浏览器,开启相应flag可以实现。
a.. chrome浏览器输入 chrome://flags/#unsafely-treat-insecure-origin-as-secure
b. 将该 flag 切换成 enable 状态
c. 输入框中填写需要开启的域名,譬如example.com,多个以逗号分隔
Ⅵ html5怎样调用手机摄像头或者相册
用input type=file capture=camcorder调用摄像头,会先让你选择拍照或者从相册选取。
首先实现在浏览器中调用手机摄像头,实现拍照功能并且把拍下的照片显示在页面并上传到服务器上,然后再在服务器端进行分析。
首先实现在浏览器中调用摄像头,当然用现在火的不行的html5,html5中的<video>标签,并将从摄像头获得视频作为这个标签的输入来源。实现拍照功能的html5代码:
<article>
<style scoped>
video { transform: scaleX(-1); }
p { text-align: center; }
</style>
<h1>Snapshot Kiosk</h1>
<section id="splash">
<p id="errorMessage">Loading...</p>
</section>
<section id="app" hidden>
<p><video id="monitor" autoplay></video> <canvas id="photo"></canvas>
<p><input type=button value="📷" onclick="snapshot()">
</section>
<script>
navigator.getUserMedia({video:true}, gotStream, noStream);
var video = document.getElementById('monitor');
var canvas = document.getElementById('photo');
function gotStream(stream) {
video.src = URL.createObjectURL(stream);
video.onerror = function () {
stream.stop();
};
stream.onended = noStream;
video.onloadedmetadata = function () {
canvas.width = video.videoWidth;
canvas.height = video.videoHeight;
document.getElementById('splash').hidden = true;
document.getElementById('app').hidden = false;
};
}
function noStream() {
document.getElementById('errorMessage').textContent = 'No camera available.';
}
function snapshot() {
canvas.getContext('2d').drawImage(video, 0, 0);
}
</script>
</article>
经本人测试在android手机的opera浏览器浏览器下可以正常实现手机拍照功能。android手机下的google chrome浏览器还不行,自带的浏览器也测试没有通过。iphone手机的safari浏览器也是不支持的。
想了解更多关于html5调用手机摄像头的内容可以点击http://dev.w3.org/2011/webrtc/editor/getusermedia.html。
图片的获取:
下面我们要从Canvas获取图片数据,其核心思路是用canvas的toDataURL将Canvas的数据转换为base64位编码的PNG图像,类似于“data:image/png;base64,xxxxx”的格式。
Html代码
var imgData =canvas.toDataURL("image/png");
因为真正图像数据是base64编码逗号之后的部分,所以我们实际服务器处理的图像数据应该是这部分,我们可以用两种办法来获取。
第一种:是在前端截取22位以后的字符串作为图像数据,例如:
Html代码
var data = imgData.substr(22);
如果要在上传前获取图片的大小,可以使用:
Html代码
var length = atob(data).length;// atob decodes a string of data which has been encoded using base-64 encoding
第二种:是在后端获取传输的数据后用后台语言截取22位以后的字符串。例如PHP里
php代码:
$image = base64_decode( str_replace('data:image/jpeg;base64,', '',$data);
图片上传:
在前端可以使用Ajax将上面获得的图片数据上传到后台脚本。例如使用jQuery时:
js代码
$.post('upload.php',{ 'data' : data } );
在后台我们用PHP脚本接收数据并存储为图片。
php代码
function convert_data($data){
$image = base64_decode( str_replace('data:image/jpeg;base64,', '',$data);
save_to_file($image);
}
function save_to_file($image){
$fp = fopen($filename, 'w');
fwrite($fp, $image); fclose($fp);
}
请注意,以上的解决方案不仅能用于Web App拍照上传,并且你可以实现把Canvas的输出转换为图片上传的功能。这样你可以使用Canvas为用户提供图片编辑,例如裁剪、上色、涂鸦的画板功能,然后把用户编辑完的图片保存到服务器上。
Ⅶ 关于前端响应式的问题
@media响应式媒介尺寸,这个是我以前看到收藏的 你得知道自己特定设备的尺寸来对应相应的@media媒体查询;望采纳!!!!
一、定义断点
手机的屏幕比较小,宽度通常在600像素以下;PC的屏幕宽度,一般都在1000像素以上(目前主流宽度是1366×768)设置相应的min-width和max-width值
所以响应式设计一般对600px下,1000px上针对各版本做@media细化。
主要的有:
1.第一个断点群体就是针对于智能手机设置,他的宽度是小于480px(
2.第二个断点是高智能移动设备,比如说Ipads设备,他的宽度是小于768px(
3.第三个断点就是针对于大设备,比如说PC端,他的宽度是大于768px(>768px)
为了完美一些,我们还可以添加另外几种断点:
1.添加一个小于320px的断点,针对于小型的移动设备;(
2.还可以添加适用于平板设备的断点,大于768px小于1024px(>768px 和
3.最后还可以为超宽的桌面设置一个断点,大于1024px(>1024px)
综合下来,设置断点把握三个要点:
1.满足主要的断点;
2.有可能的话添加一些别的断点;
3.设置高于1024px的桌面断点
PC端一般常用尺寸:
@mediascreenand(max-width:2059px){
ol.dribbbles{
max-width:1750px
}
}
@mediascreenand(max-width:1809px){
ol.dribbbles{
max-width:1500px
}
}
@mediascreenand(max-width:1559px){
ol.dribbbles{
max-width:1250px
}
}
@mediascreenand(max-width:1309px){
ol.dribbbles{
max-width:1000px
}
}
@mediascreenand(max-width:1059px){
ol.dribbbles{
max-width:750px
}
}
@mediascreenand(max-width:809px){
ol.dribbbles{
max-width:500px
}
}
@mediaonlyscreenand(max-width:870px){
}
@mediascreenand(max-width:520px){
}
/*各种手机的@media媒介*/
参考:http://www.bluesdream.com/blog/jquery-css-fixed-toolbar-compatible-ie6.html
@mediascreenand(max-height:475px){
}
/*此参数为iphone4的高度限制*/
@mediascreenand(max-height:480px)and(max-width:320px){
}
/*此参数为iphone4-iphone5的高度限制*/
@mediascreenand(min-height:481px)and(max-height:568px){
}
/*此参数为iphone5-iphone6的高度限制*/
@mediascreenand(min-height:480px)and(max-height:667px){
}
/*联想的尺寸*/
@mediascreenand(min-height:668px)and(max-height:735px){
}
/*此参数为iphone6plus的高度*/
@mediascreenand(min-height:736px){
}
/*此参数为红米Note判断*/
@mediascreenand(min-height:737px){
}
或者适配iphone和ipad等设备
@mediascreenand(min-width:321px)and(max-width:375px){html{font-size:11px}}
@mediascreenand(min-width:376px)and(max-width:414px){html{font-size:12px}}
@mediascreenand(min-width:415px)and(max-width:639px){html{font-size:15px}}
@mediascreenand(min-width:640px)and(max-width:719px){html{font-size:20px}}
@mediascreenand(min-width:720px)and(max-width:749px){html{font-size:22.5px}}
@mediascreenand(min-width:750px)and(max-width:799px){html{font-size:23.5px}}
@mediascreenand(min-width:800px){html{font-size:25px}}