如何检查一个图像是否是一个破碎的图像或不是在javascript
How to check whether an image is a Broken image or not in javascript
我从Twitter获取个人资料图像并将图像url存储在数据库中。一些url给出了破碎的图像,其中url以图像扩展结束,任何人都可以帮助我检查图像是有效的图像或破碎的图像。如果破碎的图像存在,我需要显示一个默认的图像..
var image = opinionmakers[i].user_image;
if (type == 'Twitter' && image.match(/jpeg/)) {
img = image.slice(0, -12) + ".jpeg";
} else if (type == 'Twitter' && image.match(/jpg/)) {
img = image.slice(0, -11) + ".jpg";
} else if (type == 'Twitter' && image.match(/JPG/)) {
img = image.slice(0, -11) + ".JPG";
} else if (type == 'Twitter' && image.match(/png/)) {
img = image.slice(0, -11) + ".png";
} else if (type == 'Twitter' && image.match(/gif/)) {
img = image.slice(0, -11) + ".gif";
} else {
img = image;
}
这只是一个如何实现的小技巧:
<img src="https://pbs.twimg.com/profile_images/596630109613740032/S_jtpvR4.jpg"
onLoad="checkState(this, true);" onError="checkState(this, false);">
<img src="https://www.google.de/images/nav_logo195.png"
onLoad="checkState(this, true);" onError="checkState(this, false);">
...
function checkState(e, s)
{
console.log("loaded:");
console.log(s);
console.log(e);
}
首先,为了检查正确的图像扩展,我建议使用regex。像这样测试函数
/'.(jpeg|jpg|png|gif)'b/i.test(url);
意思是"匹配所有带有'的模式"。'后面跟着()中的任意字符串,/b表示单词结束,/i表示区分大小写。你也可以只使用它一次,在你的其他代码之前,使它更清晰。
要检查有效的图像,您可以创建一个img元素,并对其错误和加载回调作出反应,如https://jsfiddle.net/msong1q2/1/
var IsValidImage = function (url, callback) {
$("<img>", {
src: url,
error: function () {
callback(url, false);
},
load: function () {
callback(url, true);
}
});
}
var CallbackFunction = function (url, isValid) {
if (isValid) {
alert(url + ' is valid image');
//do whatever logic you want
} else {
alert(url + ' is invalid image');
//do whatever logic you want
}
}
IsValidImage('http://nonextistentUrl.com/image.png', CallbackFunction);
IsValidImage('http://placehold.it/350x150.png', CallbackFunction);
有两种相对较好的方法来检查图像是否在您留下它的地方。
- 使用图像属性onerror(兼容所有浏览器)。
- 使用ajax(需要兼容性,在控制台中抛出和错误,跨域策略等)。
。你只想检查一个图像(跨域能力)是否可用,不要显示它
这是纯javascript,所以它可以在大多数移动/桌面浏览器上本地工作。此代码还避免了无用的完整图像加载。
这段代码在控制台中抛出错误。但这不是问题。也许可以通过使用try catch
来避免这种错误,但这需要在函数内部使用匿名函数,如果大量使用将导致内存泄漏。。。所以404错误不是问题,因为它实际上没有找到请求的图像。
var c=new XMLHttpRequest;
c.open('GET','THE_IMAGE_LINK');
c.onreadystatechange=function(){
if(this.readyState==2){
// get only the header info not the full image
alert(this.status);
// 200=img ok 404=not found
this.status!='200'||alert(this.getAllResponseHeaders());
//contains more info about the image
this.abort()
//stop loading the extra image data if you just check.
}
};
c.send();
0:请求未初始化
1: server connection established
2:请求收到
3:处理请求<-不需要
4:请求已完成,响应已就绪<-不需要
B。
如果你找不到它,你想显示一个替代图像。function noimg(e){
this.src='NoImgIcon.png';
}
function fadein(e){
document.body.appendChild(this);
}
function loadIMG(url){
var img=document.createElement('img');
img.onload=fadein;
img.onerror=noimg;
img.src=url
}
loadIMG('THE_IMAGE_LINK');
想在函数中使用它吗?问。
<!DOCTYPE html>
<html>
<head>
<script>
function imageCheck(event) {
var file = document.querySelector('input[type=file]').files[0];
var reader = new FileReader();
reader.onload = function () {
if (reader.result == 'data:') {
alert('This file is corrupt')
} else {
alert('This file can be uploaded')
}
}
reader.readAsDataURL(event.target.files[0]);
}
</script>
</head>
<body>
<input type='file' id="image" onchange="imageCheck(event)">
<img id="output_image" />
</body>
</html>
检查图片是否完整。这是最简单的方法,对我来说很有效。
if(image.complete){
//draw image
}
更多信息:https://www.w3schools.com/jsref/dom_obj_image.asp
complete:返回浏览器是否完成图片加载
注意:当你有一个每秒重画图像多次的循环,并且可能在加载图像之前尝试画它时,这是最有用的。如果您只需要在它加载后绘制一次,那么onload
处理程序应该是一种方法,就像这个问题的其他答案所推荐的那样。
- 如何在鼠标悬停时在另一个图像上滑动图像.
- 如何将多个画布保存为一个图像
- 是否可以仅通过jQuery将图像替换为用户动态选择的另一个图像
- Javascript/jQuery压缩一个图像正确的评论帖子,并使用Ajax Laravel 5.2保存到控制器中
- 如何在设定的时间间隔内一次只显示一个图像
- 如何在另一个html文件的框架中包含图像
- 循环以检查数组中的最后一个图像
- 下载Div&画布为一个图像
- 使用D3.js和GeoJson在地图上的某些坐标上设置一个小图像
- 当页面包含指向一个图像的多个链接时,fancyBox会复制缩略图辅助图像
- PNG图像被覆盖,但每个图像都有一个链接可以更改,每次一个-Javascript/jQuery/CSS
- 如何从 javascript 中可能具有一个或多个图像的字符串中仅获取图像名称
- 在引导程序旋转木马中显示下一个图像
- 拉斐尔用一个图像填满了这个圆圈
- 一个javascript实现base64图像编码并将结果写入文本文件
- 当我点击MVC视图中的图像时,如何打开另一个页面
- 创建,显示图像作为背景图像一个接一个- JavaScript
- 添加图像一个接一个的元素点击
- 将图像一个叠在另一个上面
- 将图像一个堆叠到另一个(javascript)