(1)说明:

(2)添加依赖

implementation 'id.zelory:compressor:2.1.0'

(3)清单文件

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

(4)主界面

package com.example.gridimage;import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.widget.BaseAdapter;
import android.widget.GridView;import java.util.ArrayList;
import java.util.List;public class MainActivity extends AppCompatActivity {//参考网址:https://github.com/abr13/MediaCompressor//本地的一张10M的大图片  不压缩直接加载会oomprivate String imagePath = "/storage/emulated/0/image/IMG_20200128_163036.jpg";private GridView gridView;private ImageAdapter adapter;private List<ItemBean> languageList;private String[] titles = {"测试0", "测试1", "测试2", "测试3","测试4", "测试5", "测试6", "测试7","测试8", "测试9", "测试10", "测试11", "测试12", "测试13", "测试14", "测试15","测试16", "测试17", "测试18", "测试19","测试20", "测试21", "测试22"};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);pernmissionHandle();  //申请权限FileUtil fileZipUtil = new FileUtil(MainActivity.this,imagePath, 720, 720, 30);String imageString = fileZipUtil.convert();languageList = new ArrayList<>();for (int i = 0; i < titles.length; i++) {languageList.add(new ItemBean(titles[i], "描述" + i, imageString, "距离" + i));}gridView = findViewById(R.id.gridView);adapter = new ImageAdapter(languageList, MainActivity.this);gridView.setAdapter(adapter);}//permissionprivate void pernmissionHandle() {//checkcheckPermission(Manifest.permission.READ_EXTERNAL_STORAGE, 100);checkPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE, 101);checkPermission(Manifest.permission.INTERNET, 103);}//permissionpublic void checkPermission(String permission, int requestCode) {if (ContextCompat.checkSelfPermission(MainActivity.this, permission) == PackageManager.PERMISSION_DENIED) {// Requesting the permissionActivityCompat.requestPermissions(MainActivity.this, new String[]{permission}, requestCode);}}}

(5)压缩类

package com.example.gridimage;import android.content.Context;
import android.graphics.Bitmap;
import android.os.Environment;
import android.util.Log;import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;import id.zelory.compressor.Compressor;//图片压缩工具类
public class FileUtil {private Context context;private String path;private int width;private int height;private int quality;/*** @param context* @param path    本地文件路径* @param width   宽度* @param height  高度* @param quality 压缩率 0-100*/public FileUtil(Context context, String path, int width, int height, int quality) {this.context = context;this.path = path;this.width = width;this.height = height;this.quality = quality;}public String convert() {// File imagePath = new File(Objects.requireNonNull(imagePath));File imagePath = new File(path);Bitmap imageBitmap = null;try {imageBitmap = new Compressor(context).setMaxWidth(width).setMaxHeight(height).setQuality(quality).compressToBitmap(imagePath);} catch (IOException e) {e.printStackTrace();}//   storeImage(imageBitmap);File pictureFile = getOutputMediaFile();try {FileOutputStream fos = new FileOutputStream(pictureFile);imageBitmap.compress(Bitmap.CompressFormat.JPEG, quality, fos);//  iv.setImageBitmap(imageBitmap);fos.close();} catch (FileNotFoundException e) {Log.d("TAG", "File not found: " + e.getMessage());} catch (IOException e) {Log.d("TAG", "Error accessing file: " + e.getMessage());}return pictureFile.getPath();}private File getOutputMediaFile() {File mediaStorageDir = new File(Environment.getExternalStorageDirectory()+ "/Media Compressor/Compressed");// Create the directory if it does not existif (!mediaStorageDir.exists()) {if (!mediaStorageDir.mkdirs()) {return null;}}// Create a file name format with timestampString timeStamp = new SimpleDateFormat("ddMMyyyy_HHmmss").format(new Date());File mediaFile;String format = ".png";String mImageName = "compressed_" + timeStamp + format;mediaFile = new File(mediaStorageDir.getPath() + File.separator + mImageName);Log.e("TAG", "path:" + mediaFile.getPath());return mediaFile;}}

(6)适配器

package com.example.gridimage;import android.content.Context;
import android.net.Uri;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;import java.io.File;
import java.util.List;public class ImageAdapter extends BaseAdapter {private List<ItemBean> languageList;private Context context;public ImageAdapter(List<ItemBean> languageList, Context context) {this.languageList = languageList;this.context = context;}@Overridepublic int getCount() {return languageList.size();}@Overridepublic Object getItem(int i) {return null;}@Overridepublic long getItemId(int i) {return 0;}public View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder = null;if (convertView == null) {holder = new ViewHolder();//由于我们只需要将XML转化为View,并不涉及到具体的布局,所以第二个参数通常设置为nullconvertView = LayoutInflater.from(context).inflate(R.layout.item, null);holder.title = convertView.findViewById(R.id.tv_title);holder.explain = convertView.findViewById(R.id.tv_explain);holder.path = convertView.findViewById(R.id.tv_path);holder.faraway = convertView.findViewById(R.id.tv_faraway);holder.iv_item = convertView.findViewById(R.id.iv_item);convertView.setTag(holder);} else {holder = (ViewHolder) convertView.getTag();}holder.title.setText(languageList.get(position).getTitle());holder.explain.setText(languageList.get(position).getExplain());holder.path.setText(languageList.get(position).getPath());holder.faraway.setText(languageList.get(position).getFaraway());holder.iv_item.setImageURI(Uri.fromFile(new File(languageList.get(position).getPath())));return convertView;}class ViewHolder {public TextView title;public TextView explain;public TextView path;public TextView faraway;public ImageView iv_item;}}

(7)Bean类

package com.example.gridimage;import android.widget.TextView;public class ItemBean {public String title;public String explain;public String path;public String faraway;/*** @param title   标题* @param explain 说明* @param path    图片路径* @param faraway 距离*/public ItemBean(String title, String explain, String path, String faraway) {this.title = title;this.explain = explain;this.path = path;this.faraway = faraway;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getExplain() {return explain;}public void setExplain(String explain) {this.explain = explain;}public String getPath() {return path;}public void setPath(String path) {this.path = path;}public String getFaraway() {return faraway;}public void setFaraway(String faraway) {this.faraway = faraway;}
}

(8)主界面布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><GridViewandroid:id="@+id/gridView"android:layout_width="match_parent"android:layout_height="match_parent"android:numColumns="3"android:verticalSpacing="20dp"android:horizontalSpacing="20dp"/></LinearLayout>

(9)itrm

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="200dp"android:orientation="horizontal"><ImageViewandroid:id="@+id/iv_item"android:layout_width="200dp"android:layout_height="match_parent"android:scaleType="fitStart"android:src="@mipmap/ic_launcher" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="200dp"android:gravity="center"android:orientation="vertical"><TextViewandroid:id="@+id/tv_title"android:layout_width="100dp"android:layout_height="0dp"android:layout_weight="1"android:textColor="@android:color/holo_red_dark" /><TextViewandroid:id="@+id/tv_explain"android:layout_width="100dp"android:layout_height="0dp"android:layout_weight="1"android:textColor="@android:color/holo_orange_light" /><TextViewandroid:id="@+id/tv_path"android:layout_width="100dp"android:layout_height="0dp"android:layout_weight="1"android:textColor="@android:color/holo_blue_dark" /><TextViewandroid:id="@+id/tv_faraway"android:layout_width="100dp"android:layout_height="0dp"android:layout_weight="1"android:textColor="@android:color/holo_green_dark" /></LinearLayout></LinearLayout>

end

Compressor图片压缩相关推荐

  1. compressor 图片压缩上传

    https://mp.weixin.qq.com/s/OGUVMf_h3jRIGQjj3VtgOQ import Compressor from 'compressorjs';

  2. android 和RxJava配合使用的两个图片压缩框架LuBan、Compressor

    在android中,图片压缩已经是必备技能,相信大家都有自己的工具类,但是在如果你的项目中使用了RxJava,那么为了保证代码的风统一性,使用LuBan或者Compressor就在合适不过了! LuB ...

  3. (原创)介绍一个优秀的图片压缩库Compressor

    我们在做项目的时候,有时候需要在界面展示一张较大的图片 这时候我们应该想到两点 1图片是否能够缓存 2图片是否能够压缩 做到了缓存和压缩,才能尽可能低减少内存的负荷,增强app的流畅度 最近在了解这方 ...

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

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

  5. Android图片压缩库——libjpeg-turbo

    为何Android图片压缩效率比IOS低质量差 为什么Android的图片压缩质量要比iPhone的压缩质量差很多,这是因为Android底层犯的一个小错误:libjpeg.并且这个错误一直持续到了今 ...

  6. android图片压缩的两个开源库

    Luban(鲁班) -- Android图片压缩工具,仿微信朋友圈压缩策略. 项目描述 目前做App开发总绕不开图片这个元素.但是随着手机拍照分辨率的提升,图片的压缩成为一个很重要的问题.单纯对图片进 ...

  7. 最详细的Android图片压缩攻略

    Mr.Louis的博客地址: https://blog.csdn.net/weixin_44005563 最近在研究图片压缩原理,看了大量资料,从上层尺寸压缩.质量压缩原理到下层的哈夫曼压缩,走成华大 ...

  8. Android中图片压缩分析(上)

    此文章首发:https://mp.weixin.qq.com/s/QZ-XTsO7WnNvpnbr3DWQmg 一.前言 在 Android 中进行图片压缩是非常常见的开发场景,主要的压缩方法有两种: ...

  9. python 对png图片压缩

    从github上查找了很多python对图片压缩的项目,发现大多用的都是基于pngquant的开发. 很多是基于命令行的方式开发. 然而pngquant工程中有个submodule,引用的是libim ...

最新文章

  1. 二级菜单从mysql中取_MyEclipes中如何如何让通过读取Mysql中的数据来实现二级菜单分类...
  2. Activity的切换动画
  3. pom文件报错_maven-resources-plugin修改了我的文件
  4. 微信公众号url服务器在哪里,微信公众号url认证(服务器认证)
  5. wordpress友联_Wordpress 友情链接页面终极版 – Fatesinger
  6. [Python] 网络爬虫和正则表达式学习总结
  7. 吴恩达深度学习之二《改善深层神经网络:超参数调试、正则化以及优化》学习笔记
  8. ubuntu 常用指令
  9. (配置消息转换器) sso单点登入之jsonp改进版
  10. 最近一段时间的手工作品
  11. MacBook Pro 如何删除多余专注模式?
  12. 技巧:如何从苹果Mac跟踪设备上所有电池的电量?
  13. jquery文档就绪的三种书写方式
  14. NS方程求解-NSFnet
  15. 【PS】黑白照片改为彩色照片
  16. Intel Edison 第一次使用的更新
  17. python3获取天气预报
  18. windows客户端开发--如何测量一个字符串显示的物理长度
  19. 3.19百度移动端 一连三面
  20. Python性能优化

热门文章

  1. 从欧拉函数、欧拉定理到RSA加解密
  2. 环信集成服务端封装类-聊天室
  3. 文件右键菜单没有“授予访问权限”选项
  4. mysql删除表并释放空间_Mysql删除数据后,如何释放磁盘空间
  5. lis系统接口linux实现,LIS系统接口方案
  6. 机器/深度学习Milvus、Annoy、Vearch、sk-dist介绍
  7. 获取sql server与年、季度、月、周首尾有关的时间函数
  8. 使用gdb调试程序完全教程
  9. pycharm 怎么调试html,pycharm怎么调试程序
  10. 秒懂脏读、幻读、不可重复读