public class MainActivity extends AppCompatActivity {

    private ImageView ivIcon;

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //找控件
ivIcon = (ImageView) findViewById(R.id.ivIcon); } public void btnImageResizer(View view){ //loadImage("http://tnfs.tngou.net/image/info/150822/d35a601b668c160a07c43d4925af9007.jpg");
loadImage2("http://tnfs.tngou.net/image/info/150822/d35a601b668c160a07c43d4925af9007.jpg"); } private void loadImage(String url){ new AsyncTask<String,Void,Bitmap>(){ @Override
protected void onPostExecute(Bitmap bitmap) {
super.onPostExecute(bitmap);
//主线程
if(bitmap != null){
ivIcon.setImageBitmap(bitmap);
}else{
ivIcon.setBackgroundResource(R.mipmap.ic_launcher_round);
} } @Override
protected Bitmap doInBackground(String... params) { //子线程运行,可以执行耗时操作吧
try {
String path = params[0];
URL url = new URL(path);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000); //等待服务器响应
int code = connection.getResponseCode(); if(code == 200){ InputStream is = connection.getInputStream(); BitmapFactory.Options options = new BitmapFactory.Options();
//首先不要对图片进行真正解析,只需要假解析(只需要得到图片的宽高)
//inJustDecodeBounds = true BitmapFactory不会去真正解析这张图片的数据
//只会解析这张图片的宽高
options.inJustDecodeBounds = true;
//options 多个选项
BitmapFactory.decodeStream(is,null,options); //得到图片宽高
int width = options.outWidth;
int height = options.outHeight; //System.out.println("宽 : "+width+" 高 : "+height); //定义变量记住采样率信息
int inSampleSize = 1;//1 默认不对图片进行任何的压缩 if(width > 100 || height > 100){ int halfWidth = width / 2;//640 / 2 = 320
int halfHeight = height / 2; //计算采样率
while ((halfWidth / inSampleSize) >= 100 && (halfHeight / inSampleSize) >= 100){ inSampleSize *= 2; }
}
//真正解析图片
options.inSampleSize = inSampleSize;
//inJustDecodeBounds = false 图片工厂会去对图片真正解析
options.inJustDecodeBounds = false;
//转换不出来图片的原因是系统方法Bug
//避免这个bug好的方法:将之前获取的图片流关闭
is.close();
//通过url对象重新得到图片流
is = url.openStream();
Bitmap bitmap = BitmapFactory.decodeStream(is,null,options);
//Bitmap bitmap = BitmapFactory.decodeStream(is);
is.close();
return bitmap; } } catch (Exception e) {
e.printStackTrace();
} return null;
}
}.execute(url);
}

imageloader+图片压缩的更多相关文章

  1. Golang 编写的图片压缩程序,质量、尺寸压缩,批量、单张压缩

    目录: 前序 效果图 简介 全部代码 前序: 接触 golang 不久,一直是边学边做,边总结,深深感到这门语言的魅力,等下要跟大家分享是最近项目 服务端 用到的图片压缩程序,我单独分离了出来,做成了 ...

  2. 三款不错的图片压缩上传插件(webuploader+localResizeIMG4+LUploader)

    涉及到网页图片的交互,少不了图片的压缩上传,相关的插件有很多,相信大家都有用过,这里我就推荐三款,至于好处就仁者见仁喽: 1.名气最高的WebUploader,由Baidu FEX 团队开发,以H5为 ...

  3. 前端构建工具之gulp(一)「图片压缩」

    前端构建工具之gulp(一)「图片压缩」 已经很久没有写过博客了,现下终于事情少了,开始写博吧 今天网站要做一些优化:图片压缩,资源合并等 以前一直使用百度的FIS工具,但是FIS还没有提供图片压缩的 ...

  4. gulp图片压缩

    gulp图片压缩 网页性能优化,通常要处理图片,尤其图片量大的时候,更需要工具来批量处理,这里使用gulp,做个简单总结 image-resize压缩尺寸 var gulp = require('gu ...

  5. Android 图片压缩、照片选择、裁剪,上传、一整套图片解决方案

    1.Android一整套图片解决方案 http://mp.weixin.qq.com/s?__biz=MzAxMTI4MTkwNQ==&mid=2650820998&idx=1& ...

  6. Java中图片压缩处理

    原文http://cuisuqiang.iteye.com/blog/2045855 整理文档,搜刮出一个Java做图片压缩的代码,稍微整理精简一下做下分享. 首先,要压缩的图片格式不能说动态图片,你 ...

  7. android 图片压缩

    引用:http://104zz.iteye.com/blog/1694762 第一:我们先看下质量压缩方法: private Bitmap compressImage(Bitmap image) { ...

  8. HTML5 CANVAS 实现图片压缩和裁切

    原文地址:http://leonshi.com/2015/10/31/html5-canvas-image-compress-crop/?utm_source=tuicool&utm_medi ...

  9. C# 图片压缩

    /// <summary>        /// 图片压缩方法        /// </summary>        /// <param name="sF ...

随机推荐

  1. Event StoryLine Corpus 论文阅读

    Event StoryLine Corpus 论文阅读 本文是对 Caselli T, Vossen P. The event storyline corpus: A new benchmark fo ...

  2. JavaScript控制语句结构、函数部分

    HTML页面代码: <html> <head> <meta charset="UTF-8"> <title>HelloWorld&l ...

  3. python爬虫笔记之re.match匹配,与search、findall区别

    为什么re.match匹配不到?re.match匹配规则怎样?(捕一下seo) re.match(pattern, string[, flags]) pattern为匹配规则,即输入正则表达式. st ...

  4. 反⑨baka拖更大队:临时约法

    本团队中将不时发起团队讨论报道⑨baka无良~ 某无良⑨baka一直拖更引起广大人民群众不满 文文新闻:https://www.luogu.org/discuss/show/52654 反⑨baka的 ...

  5. 15号作品teamfinal使用体验

    通过使用这款软件,可以轻松的查阅所处学期的任意周中某一天中的基教.一教.二教.三教和土木楼中的空教室,方便了同学去寻找空教室的方便,方便同学们上自习,节省寻找教室的时间,提供了非常大的便利. 打开界面 ...

  6. Flink实战(六) - Table API & SQL编程

    1 意义 1.1 分层的 APIs & 抽象层次 Flink提供三层API. 每个API在简洁性和表达性之间提供不同的权衡,并针对不同的用例. 而且Flink提供不同级别的抽象来开发流/批处理 ...

  7. Ubuntu中目录右下角的锁标志

    在ubuntu中如果是用root权限创建的目录,在普通权限下展示时则会出现一个锁的标志,表明该目录是一个受保护的目录(只读,不能写入和删除),普通权限无法对其进行操作.如用命令sudo mkdir d ...

  8. Java秒杀系统实战系列~构建SpringBoot多模块项目

    摘要:本篇博文是“Java秒杀系统实战系列文章”的第二篇,主要分享介绍如何采用IDEA,基于SpringBoot+SpringMVC+Mybatis+分布式中间件构建一个多模块的项目,即“秒杀系统”! ...

  9. python正则表达式与re模块-02

    正则表达式 正则表达式与python的关系 # 正则表达式不是Python独有的,它是一门独立的技术,所有的编程语言都可以使用正则 # 但要在python中使用正则表达式,就必须依赖于python内置 ...

  10. 《VR入门系列教程》之16---第一个OculusVR应用

    第一个VR应用    之前我们已经将Oculus的开发包导入到空工程中了,现在我们来构建第一个桌面VR的示例.开发包中已经有一个示例场景,只需要几步就可以让这个场景运行起来.我们将要构建的这个Demo ...