用js判断图片地址是否有效

方法一:

//判断图片是否存在
function CheckImgExists(imgurl) {
var ImgObj = new Image(); //判断图片是否存在 
ImgObj.src = imgurl; 
//存在图片
if (ImgObj.fileSize > 0 || (ImgObj.width > 0 && ImgObj.height > 0)) { 
console.log('图片地址有效')
return true;
} else {
console.log('图片地址无效') 
return false;
} 
}

直接调用函数 CheckImgExists(图片地址) 即可

方法二:

//判断图片是否存在
function is_img_url(imgurl) {
return new Promise(function(resolve, reject) {
var ImgObj = new Image(); //判断图片是否存在
ImgObj.src = imgurl;
ImgObj.onload = function(res) {
resolve(res);
}
ImgObj.onerror = function(err) {
reject(err)
}
}).catch((e) => {}); // 加上这句不会报错(Uncaught (in promise))
}

有效返回 true,无效返回 false

两种判断方式

var cover_img,img = '/static/artice/images/icon24.png'; //默认图片(失败显示图)
// 判断图片是否存在
if(is_img_url(data.cover_map)){
img = data.cover_map
}

cover_img = `<img src="${img}" οnerrοr="javascript:this.src='/static/artice/images/icon24.png';" alt="">`

方法三:

要判断图片链接是否有效,我们首先创建一个Image对象,然后把链接设置在Image对象上,如果能正常加载,则代表链接有效。因为图片是异步加载的,所以我们需要Promise来处理。创建一个处理函数,如下代码:

function checkImgExists(imgurl) {
    return new Promise(function(resolve, reject) {
      var ImgObj = new Image()
      ImgObj.src = imgurl
      ImgObj.onload = function(res) {
        resolve(res)
      }
      ImgObj.onerror = function(err) {
        reject(err)
      }
    })
}
  • 根据以上代码,当图片加载成功时,resolve(完成)被触发,当图片加载失败时,reject(失败)被触发。于是可以使用一下代码进行调用测试:
checkImgExists('https://test.com/dssd=0.jpg').then(()=>{
    //success callback
    console.log('有效链接')
}).catch(()=>{
    //fail callback
    console.log('无效链接')
})

全部代码如下:

function checkImgExists(imgurl) {
    return new Promise(function(resolve, reject) {
      var ImgObj = new Image();
      ImgObj.src = imgurl;
      ImgObj.onload = function(res) {
        resolve(res);
      }
      ImgObj.onerror = function(err) {
        reject(err)
      }
    })
}

checkImgExists('https://test.com/20200803115749u=2876792700,1627849181&fm=26&gp=0.jpg').then(()=>{
    //success callback
    console.log('有效链接')
}).catch(()=>{
    //fail callback
    console.log('无效链接')
})

Related Post

发表回复