这种vue 图片验证码路劲路劲在手机预览上是看不到的?是不是一定要https?

使用Glide加载图片系列之一从不同的数据源加载图片 - 简书
使用Glide加载图片系列之一从不同的数据源加载图片
与其他图片加载库相同,Glide除了可以加载网络图片之外,也可以加载本地图片。甚至还可以从各种各样奇葩的数据源中加载图片。
加载网络图片
很多情况下,我们使用图片加载库就是为了加载网络图片。网络操作是一个很复杂的东西。试想一下,如果没有图片加载库,我们就要手动去下载图片,缓存图片,最后再从文件里面读取bitmap并设置到Imageview里面。这还算好的,要是在Listview里面你会更头疼的。原因我就不说了,你懂的~~再加上各种各样的Bitmap操作,保准你再也不想撸代码了。而且Bitmap这东西还很占内存,伺候不好,很容易就会引发OOM,app吧唧就闪退了!!
图片加载库的优势就在于此。简简单单一句话,下载,缓存,加载统统搞定。简直就是美好一生的东西。而Glide就是这样使人美好一生的东西之一。
说了这么多,Glide如何加载网络图片?很简单,就上次的三句话:
ImageView targetImageView = (ImageView) findViewById(R.id.imageView);
String internetUrl = "http://i.imgur.com/idojSYm.png";
.with(context)
.load(internetUrl)
.into(targetImageView);
木有什么乱七八糟的东西,直接传入要加载图片的url就可以了。那么图片加载库有很多,为什么选择Glide呢?很简单,因为它流畅,不卡,尤其是在Listview中。嗯,就是酱~
加载本地图片
下表是.load()可以传入的参数及说明
.load(String string)
string可以为一个文件路径、uri或者url
.load(Uri uri)
.load(File file)
.load(Integer resourceId)
资源Id,R.drawable.xxx或者R.mipmap.xxx
.load(byte[] model)
byte[]类型
.load(T model)
自定义类型
从上面可以看到Glide不仅可以加载网络图片,还可以加载本地图片。可接受的参数有文件路径,uri,文件,资源id等。基本上满足了大部分的需求。虽然加载本地图片不像网络图片那样复杂,但我还是建议使用Glide来加载本地图片。因为它是内存友好的,而且还会“偷偷地”帮我们做很多事情。比如内存缓存,Bitmap复用,修正照片方向等。当然为了满足各种各样的需求,仅仅加载图片是不够的,你还需要对图片进行各种各样的变换,也就是Transformation。后面我们会详细了解的。
加载自定义数据源
前面的表格中有一个是我们不熟悉的,就是.load(T model),即自定义的数据源类型。那么如何去实现呢?
实际上,加载自定义数据源主要是通过ModelLoader接口来实现的。由于没有在实际项目中用到过,这方面的经验比较少。想深入了解的,可以参考。
不过从官方Wiki上来看,设计ModelLoader接口的初衷用来加载不同尺寸的图片的。众所周知,Android设备屏幕分辨率千奇百怪,大到2K,小到320p。如果在低分辨率的手机上加载大图,不仅损耗用户流量,而且很容易造成OOM;在高分辨的手机上,加载小图又会出现模糊的情况,用户体验极差。很多时候,为了省事,很多app都会选择一个中间分辨率,然后自适应大小。当然这样做无可厚非,但是有更好的办法,我们为什么不去尝试呢?
那么如何使用Glide来实现这一具体需求呢?首先你要实现自己的ModelLoader,比较简单的方法是继承。
public interface MyDataModel {
public String buildUrl(int width, int height);
public class MyUrlLoader extends BaseGlideUrlLoader&MyDataModel& {
protected String getUrl(MyDataModel model, int width, int height) {
// Construct the url for the correct size here.
return model.buildUrl(width, height);
接下来我们可以这样来加载图片:
Glide.with(this)
.using(new MyUrlLoader(this))
.load(new MyDataModel() {
public String buidUrl(int width, int height) {
if (width &= 600) {
return url1;
return url2;
.into(imageView);
.using(new MyUrlLoader(this)):使用我们自己的ModeL
.load(new MyDataModel()):加载我们自定义的数据源
这里需要解释下getUrl的三个参数:
model:你加载的数据源
width:你加载的图片的宽度(px)
height:你加载的图片的高度(px)
这样,我们在高分率的设备上加载大图的url1,在低分辨率的设备上加载小图url2。从而实现了根据不同手机上的像素值大小加载不同尺寸的图片的需求。
当然如果你不想每次都是用.using(new MyUrlLoader()),就需要实现一个自定义的并在GlideModule中注册。
public class MyGlideModule implements GlideModule {
public void registerComponents(Context context, Glide glide) {
glide.register(MyDataModel.class, InputStream.class,
new MyUrlLoader.Factory());
同时也要在AndroidManifest.xml声明
&meta-data
android:name="com.mypackage.MyGlideModule"
android:value="GlideModule" /&
如果你有多个自定义的GlideModule类,那么也要在AndroidManifest.xml中声明多个GlideModule。
对于上面的加载不同尺寸的图片,Google的2014年I/O大会App中有一篇文章专门用来介绍这个的,地址在。大概原理是这样子的:
在服务端有下面的几个可以加载的url:
myserver.com/images/__w-200-400-600-800-1000__/session1.jpg
myserver.com/images/w200/session1.jpg
myserver.com/images/w400/session1.jpg
myserver.com/images/w600/session1.jpg
myserver.com/images/w800/session1.jpg
myserver.com/images/w1000/session1.jpg
那么客户端如何根据不同的手机分辨率去加载不同的url呢?
Google是这样做的,下面是核心代码:
//定义正则表达式
private static final Pattern PATTERN =
Pattern.compile("__w-((?:-?\\d+)+)__");
protected String getUrl(String model, int width, int height) {
Matcher m = PATTERN.matcher(model);
int bestBucket = 0;
if (m.find()) {
String[] found = m.group(1).split("-");//拿到可以加载的尺寸数组
for (String bucketStr : found) {
bestBucket = Integer.parseInt(bucketStr);
if (bestBucket &= width) {//刚好大于要加载的尺寸,直接跳出循环
// the best bucket is the first immediately
// bigger than the requested width
if (bestBucket & 0) {//返回合适尺寸的url
model = m.replaceFirst("w"+bestBucket);
大概的步骤如下:
1.根据服务端可加载的图片url定义正则表达式
2.根据正则匹配,获取到可以加载的图片尺寸数组
3.根据要加载的Imageview的大小,选择合适的尺寸的url
4.拼接url并返回
上面的例子中有200,400,600,800,1000是可以加载的,如果你要加载的Imageview的大小为600px,当遍历数组到600时,就会直接跳出循环,返回600px大小图片的url,Glide就会加载600px的图片。
最后送上一个小demo:
爱生活,爱coding.
一、简介 在泰国举行的谷歌开发者论坛上,谷歌为我们介绍了一个名叫Glide的图片加载库,作者是bumptech。这个库被广泛的运用在google的开源项目中,包括2014年google I/O大会上发布的官方app。 二、 使用 dependencies { compile...
简介Glide是一个Android图片库,确切地说应当叫『媒体框架』。支持图片、Gif、原生视频的加载。使用简单,可扩展性强,性能优异,Google推荐使用。名词解释Glide中有一部分单词,用英文单词可能在行文中更加合适,还有一些词在Glide中有特别的含义,这里简要说明...
在Android设备上,加载网络图片一直是一个头疼的问题,因为Android设备种类繁多(当然最主要的是配置),处理的稍不周到轻则应用卡顿,严重者就会出现OOM的,导致程序挂掉。现如今网络上有很多图片库,如 Universal-Image-Loader,Picasso,Fr...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金 相信有很多...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金相信有很多朋友...
早安分享[太阳][太阳][太阳] “人的磁场是,你不感恩,就不顺利; 你不承担责任,就不成长; 你不付出,就无所得; 你没有爱心,就没有人爱你。 一切美好,皆源于一颗感恩的心。 感恩生命中所有的相遇, 感恩这一路上所有的人[玫瑰][玫瑰][玫瑰]
人这一辈子,无非就是一个过程 荣华花间路,富贵草上霜 生不带来,死不带去 得失些什么?失意些什么 时间,能暴露谎言 能改变距离,更能看清人心 不会有人会陪你一辈子 但有些人会在艰难时援助到底 更不会有人永远不对你生气 但有些人却无条件的原谅你 不必为某一时的失败而放弃所有 ...
在门诊经常遇到一些患者因“打软腿”来就诊,而这种打软腿往往被忽视或被人们认为是关节毛病。所谓“打软腿”,又称“腿打软”、“膝盖打软”都是描述一种症状即正常行走或在上下楼梯时,突然感觉膝关节吃不住劲,腿发软,想跪下去的感觉,有时会并发剧烈疼痛而摔倒的现象。导致膝关节打软腿的常...
【师上堂云:“此事如明珠①在掌,胡来胡现,汉来汉现。”】 (1)译文: 赵州禅师上堂说:“此事就好象明珠在手中,胡来胡现,汉来汉现。” (2)注释: ①明珠:比喻真如、自性。《圆悟佛果禅师语录》卷十一中载:“直如明镜当台,明珠在掌,举无遗照,万象历然。虽四序迁移,其中有不移...获取本地文件的文件路劲
获取input框中type=‘file’ 中的文件路径
分为两部分,自己去判断浏览器的类型,然后调用不同函数,一定要引入jQuery,上面是我的Jquery的路径
在IE低版本中可以直接获得文件路径,不过在高版本和firefox和chrome中是不允许的。那是个漏洞
这样就能实现不用上传就可以实现图片的实时预览了
1.IE内核的部分,IE10 没问题,别的没试,
&!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&
&html xmlns="http://www.w3.org/1999/xhtml"&
&meta http-equiv="Content-Type" content="text/ charset=utf-8" /&
&title&无标题文档&/title&
&script type="text/javascript" src="软件工程概论/软件工程实验原型/js/jquery-1.8.3.min.js"&&/script&
&script type="text/javascript"&
var imgurl = "";
function getImgURL(node) {
var imgURL = "";
var file =
if(node.files && node.files[0] ){
file = node.files[0];
}else if(node.files && node.files.item(0)) {
file = node.files.item(0);
//这种获取方式支持IE10
node.select();
imgURL = document.selection.createRange().
alert(imgURL);
var textHtml = "&img src='"+imgURL+"'/&";
//创建img标签用于显示图片
alert(textHtml);
$(".mark").after(textHtml);
return imgURL;
&div style="width:200 height:210 border:1" id="show"&
&div class="mark"&&/div&
&input type="file" value="上传文件" onchange="getImgURL(this)"&
2.火狐和chrome浏览器,其实这个获得的文件路径不是我们能看懂的,它是一个对象,不过浏览器能解析,可能出于浏览器的安全考虑吧,本来不能显示文件路径
&!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&
&html xmlns="http://www.w3.org/1999/xhtml"&
&meta http-equiv="Content-Type" content="text/ charset=utf-8" /&
&title&无标题文档&/title&
&script type="text/javascript" src="软件工程概论/软件工程实验原型/js/jquery-1.8.3.min.js"&&/script&
&script type="text/javascript"&
var imgurl = "";
function getImgURL(node) {
var imgURL = "";
var file =
if(node.files && node.files[0] ){
file = node.files[0];
}else if(node.files && node.files.item(0)) {
file = node.files.item(0);
//Firefox 因安全性问题已无法直接通过input[file].value 获取完整的文件路径
//Firefox7.0
file.getAsDataURL();
//alert("//Firefox7.0"+imgRUL);
}catch(e){
//Firefox8.0以上
imgRUL = window.URL.createObjectURL(file);
//alert("//Firefox8.0以上"+imgRUL);
}catch(e){
//这里不知道怎么处理了,如果是遨游的话会报这个异常
//支持html5的浏览器,比如高版本的firefox、chrome、ie10
if (node.files && node.files[0]) {
var reader = new FileReader();
reader.onload = function (e) {
imgURL = e.target.
reader.readAsDataURL(node.files[0]);
//imgurl = imgURL;
creatImg(imgRUL);
return imgURL;
function creatImg(imgRUL){
//根据指定URL创建一个Img对象
var textHtml = "&img src='"+imgRUL+"'/&";
$(".mark").after(textHtml);
&div style="width:90 height:110 overflow: border:1" id="show"&
&div class="mark"&&/div&
&input type="file" value="上传文件" onchange="getImgURL(this)"&
3.其余的浏览器。我没有测试,不过国内的其他如360和遨游,等都有两种模式,一种是IE内核,这(1)中可以运行,第二种内核没找到好方法
4.推荐出处
没有更多推荐了,}

我要回帖

更多关于 idea配置图片虚拟路劲 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信