Android开发:图片处理工具类

Android图片处理:从基础知识到高级技巧 Bitmap类是Android中处理图像的核心类之一,它表示了一个位图图像,并提供了各种处理图像的方法。Bitmap管理着图片的内存和像素数据,是图像处理、显示和存储的基础。ImageView是Android开发中用于展示图片的一个视图组件,它支持多种图片格式,例如PNG、JPEG等。这个组件非常灵活,可以通过多种属性来调整图片的展示方式。 阅读详情
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.media.ExifInterface;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * 描述:图片工具类
 */

public class BitmapUtil {
    private static String PHOTO_FILE_NAME = "WSLManagerPhoto";

    /**
     * 获取图片的旋转角度
     *
     * @param filePath
     * @return
     */
    public static int getRotateAngle(String filePath) {
        int rotate_angle = 0;
        try {
            ExifInterface exifInterface = new ExifInterface(filePath);
            int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
            switch (orientation) {
                case ExifInterface.ORIENTATION_ROTATE_90:
                    rotate_angle = 90;
                    break;
                case ExifInterface.ORIENTATION_ROTATE_180:
                    rotate_angle = 180;
                    break;
                case ExifInterface.ORIENTATION_ROTATE_270:
                    rotate_angle = 270;
                    break;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return rotate_angle;
    }

    /**
     * 旋转图片角度
     *
     * @param angle
     * @param bitmap
     * @return
     */
    public static Bitmap setRotateAngle(int angle, Bitmap bitmap) {

        if (bitmap != null) {
            Matrix m = new Matrix();
            m.postRotate(angle);
            bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),
                    bitmap.getHeight(), m, true);
            return bitmap;
        }
        return bitmap;

    }

    //转换为圆形状的bitmap
    public static Bitmap createCircleImage(Bitmap source) {
        int length = source.getWidth() < source.getHeight() ? source.getWidth() : source.getHeight();
        Paint paint = new Paint();
        paint.setAntiAlias(true);
        Bitmap target = Bitmap.createBitmap(length, length, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(target);
        canvas.drawCircle(length / 2, length / 2, length / 2, paint);
        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
        canvas.drawBitmap(source, 0, 0, paint);
        return target;
    }


    /**
     * 图片压缩-质量压缩
     *
     * @param filePath 源图片路径
     * @return 压缩后的路径
     */

    public static String compressImage(String filePath) {

        //原文件
        File oldFile = new File(filePath);


        //压缩文件路径 照片路径/
        String targetPath = oldFile.getPath();
        int quality = 50;//压缩比例0-100
        Bitmap bm = getSmallBitmap(filePath);//获取一定尺寸的图片
        int degree = getRotateAngle(filePath);//获取相片拍摄角度

        if (degree != 0) {//旋转照片角度,防止头像横着显示
            bm = setRotateAngle(degree, bm);
        }
        File outputFile = new File(targetPath);
        try {
            if (!outputFile.exists()) {
                outputFile.getParentFile().mkdirs();
                //outputFile.createNewFile();
            } else {
                outputFile.delete();
            }
            FileOutputStream out = new FileOutputStream(outputFile);
            bm.compress(Bitmap.CompressFormat.JPEG, quality, out);
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
            return filePath;
        }
        return outputFile.getPath();
    }

    /**
     * 根据路径获得图片信息并按比例压缩,返回bitmap
     */
    public static Bitmap getSmallBitmap(String filePath) {
        final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;//只解析图片边沿,获取宽高
        BitmapFactory.decodeFile(filePath, options);
        // 计算缩放比
        options.inSampleSize = calculateInSampleSize(options, 480, 800);
        // 完整解析图片返回bitmap
        options.inJustDecodeBounds = false;
        return BitmapFactory.decodeFile(filePath, options);
    }


    public static int calculateInSampleSize(BitmapFactory.Options options,
                                            int reqWidth, int reqHeight) {
        final int height = options.outHeight;
        final int width = options.outWidth;
        int inSampleSize = 1;
        if (height > reqHeight || width > reqWidth) {
            final int heightRatio = Math.round((float) height / (float) reqHeight);
            final int widthRatio = Math.round((float) width / (float) reqWidth);
            inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
        }
        return inSampleSize;
    }
}

 

Android图片处理技术集合与实践Demo 在移动开发的世界中,处理图片是不可或缺的一环。随着用户对移动应用性能和美观度的要求不断提高,开发者们需要掌握各种高效的图片处理技术,来优化应用的加载速度、用户体验以及内存管理。本章将介绍一个集合了多种图片处理功能的Android demo项目,它覆盖了从图片加载、压缩、裁剪、旋转到滤镜效果,以及编码与解码等多个方面。通过这一系列的技术探索和实践,我们不仅能深入理解Android平台图片处理的原理,还能学习到如何将这些技术应用到实际开发中,使我们的应用更加完美和强大。 阅读详情

相关推荐

利用LTspice设计Pt100测温电路

是一种广泛使用的温度传感器,它属于(RTD, Resistance Temperature Detector)的类型,通常用于温度测量。在0°C时,的电阻值为100欧姆,且它的电阻值会随着温度的升高而升高。PT100热电阻温度阻值对应表)因此可以根据这一特性来检测出环境温度。

2301_77033628的博客 2416

【Android学习笔记】图形与图像处理(静态处理)

子类ComposePathEffect/CornerPathEffect/DashPathEffect/DiscretePathEffect/SumPathEffect。* Canvas坐标变换rotate()旋转,scale()缩放,skew()倾斜,translate()移动;从指定字节数组的offset位置开始,将长度length的字节解析成Bitmap对象。重复调用onDraw()方法,每次在View组件上绘制不同的东西,形成逐帧动画。setTextSize()设置文本的文字大小。

实力派,无需多言! 615

afe模拟前端的重要性_高性能模拟前端信号链解决方案如何助力医疗超声系统发展...

1942年,奥地利TDussik使用A型超声成像系统穿透性探测颅脑,并于1949年获得头部的超声图像,此举昭示超声系统进入到医疗领域。直到如今,超声系统作为用于人体内部的无创可视化技术,被广泛用于医疗领域。最近一份报告称到2022年,中国医疗超声诊断仪器行业的市场规模预计将达到15.8亿美元,保持6%左右的年均增长率。高性能模拟信号链前端是超声设备的关键组成部分,作为高性能模拟技术主要的提供商AD...

weixin_28799111的博客 1088

Android-图片压缩详解:原理、方法与实践

在Android应用开发中,处理图片是一个非常常见的需求。然而,大尺寸和高质量的图片可能会占用大量内存,导致应用程序性能下降,甚至引发OOM(Out of Memory)错误。因此,对图片进行合适的压缩是非常重要的。本文将详细介绍Android图片压缩的原理、方法和实践。在本文中,我们详细介绍了Android图片压缩的原理、方法和实践。我们学习了如何使用BitmapFactory.Options进行尺寸压缩和质量压缩,以及如何使用第三方库进行图片压缩。

沐雨风栉 6731

HFSS之天线设计实例

目录 矩形微带天线 微带天线尺寸计算 微带线的3个关键指标如以下 HFSS设计流程 新建工程并设置求解类型 天线建模 添加求解设置和扫频设置 天线建模步骤 谐振点查看 优化设计 查看天线分析结果 3D增益 Smith圆图 S参数 驻波比 ​ 平面增益 方向性系数\增益\轴比 矩形微带天线 微带天线的概念首先是由Deschamps于1953年提出来的,经过20年左右的发展,Munson和Howell于20世纪70年代初期制造出来了实际的微带天线 一个简单的...

ASH_GUARDIAN的博客 1万+

用Charles抓包调试iOS应用?这份保姆级配置指南帮你绕过所有坑

本文提供了一份在Mac上使用Charles抓包调试iOS应用的保姆级配置指南。详细讲解了从Charles安装、Mac端代理设置、根证书安装,到iOS设备连接同一WiFi、配置代理以及最关键的系统证书信任等全流程步骤,并分享了SSL代理规则、断点调试等进阶技巧,帮助开发者高效定位和解决网络请求问题。

rice5的博客 640

Android图片处理——压缩、剪裁、圆角、保存

点击查看原文项目中用到的关于图片的处理public class UtilPicture { public static final String IMAGE_UNSPECIFIED = "image/*"; /** * 将图片存储至SD卡,需判断是否装有SD卡、是否可读写、是否有空间,否则提示出错 * @param ctx 上下文 * @param jp

Metis100的专栏i6zHW5lX(fDT 2130

STM32接入CH340芯片的升级电路及初始化进入升级模式(死机)问题处理

MCU-REST 在 MCU-BOOT0 处于低电平状态下,进行下拉操作,在MCU-REST 与 MCU-BOOT0 恢复正常电平时,将导致MCU死机,MCU-REST 先于 MCU-BOOT0 下拉可解决该问题;MCU-REST 在 上升沿结束时将判断 MCU-BOOT0 的状态,MCU-BOOT0 处于高电平,MCU死机,MCU-BOOT0 处于低电平 MCU 正常;

LuDvei的博客 2491

Android开发中图片处理

在Android开发中,图片懒加载是一种提高性能的技巧,它指的是当用户滚动到图片位置时,才加载并显示图片。这样可以减少应用启动时的加载时间,节省用户的流量。在Android开发中,实现图片缓存可以提高应用的性能,减少网络请求和图片加载时间。通过以上方法,你可以在Android开发中实现图片的缓存,提高应用的性能和用户体验。a. 在布局文件中,使用占位符图片或者空视图代替实际的图片视图。如果需要加载图片,则使用。或其他图片加载方法加载图片,并设置到对应的ImageView中。

wayne214的博客 1022

一步一步教你写股票走势图——K线图一(概述)

股票分时图部分已经开发完毕,受到了广大开发者的好评!界面、功能都挺完美,解决了好一些MP开发者的问题,博主甚是欣悦,更有动力去开源K线图。这里说一下,如果有问题直接留言或者发邮件,github上个人信息有邮件,我看到基本都会回复,博主不加qq的,体谅O(∩_∩)O。分析好了,废话不多说,我们分析下K线图吧,首先我们看下自选股K线图的效果吧效果还是很赞的,经过分时图的研究后,博主越来越确信自选股用的应

体验Android编程之美 3万+

C#读取和写入excel表数据--手把手教详解

C#读写excel数据详解

如如水的博客 4055

安卓开发27:图片处理工具类

import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import android.graphics.Bitmap; import an

自娱自乐的代码人 1570

使用 Python 构建 Reddit 热帖爬虫:抓取热门讨论帖和评论

在现代互联网中,Reddit 被誉为全球最大、最活跃的讨论平台之一,汇聚了各种主题的帖子、评论和社交互动。因此,抓取 Reddit 上的热门帖子和评论可以为我们提供一个丰富的文本数据源,可以用于情感分析、话题建模、趋势分析等应用。Reddit 提供了官方的 API,可以让开发者获取包括帖子、评论、用户信息等在内的各种数据。我们可以结合上述方法,抓取多个热门帖子,并将每个帖子的标题、作者、发布时间和评论内容保存到一个数据结构中。每个帖子的对象包含了丰富的信息,如标题、内容、发布时间、作者等。

2201_76125261的博客 382

ToolsFinal 项目常见问题解决方案

ToolsFinal 项目常见问题解决方案 1. 项目基础介绍和主要编程语言 ToolsFinal 是一个针对 Android 开发的开源工具类库,它包含了常用的工具方法,旨在帮助开发者提高开发效率。该项目主要使用 Java 编程语言编写,适用于 Android 应用程序开发。 2. 新手使用项目时需注意的3个问题及解决步骤 问题一:如何将 ToolsFinal 集成到项目中? 解决步骤: 在项...

gitblog_00517的博客 565

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

安卓开发图片处理工具类

代码如下: import android.content.ContentResolver; import android.content.ContentValues; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.net....

qq_30239261的博客 756

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Android开发常用开源框架:图片处理

1、图片加载,缓存,处理 框架名称 功能描述 Android Universal Image Loader 一个强大的加载,缓存,展示图片的库,已过时 Picasso 一个强大的图片下载与缓存的库 Fresco 一个用于管理图像和他们使用的内存的库 Glide 一个图片加载和缓存的库,使用的App有:网易新闻 GlidePalette Androi

JackChan 3万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Android常用开发工具类

Android常用开发工具类应用工具类

wzgiceman 1万+

android 开发常用的工具类

转自大牛博客 https://blankj.com/ 他的工具类github https://github.com/Blankj https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/README-CN.md 目录: Activity 相关 -> ActivityUtils.java getActivityByVi...

skyang在路上 1442

Android工具类的整理

一点整理,欢迎各路大佬莅临指导 android开发的工具类 https://github.com/BlissYang91/note 包含android常规开发中常用的工具类,例如webview中的图片保存,视频全屏播放,正则匹配,微信登录,各种拼接转换工具,可以加快开发速度,更多的时间去处理业务需求,保持持续更新,希望对大家有些微帮助。 Acvitity的栈式管理工具 GlideUti...

The blog of 优快云 in 杨天福 6122

推荐一款不可或缺的Android开发利器:Android工具类库

在Android应用开发过程中,开发者常常需要处理各种重复性任务,如图片处理、数据转换、设备信息获取等。今天为大家介绍一款功能全面的**Android工具类库**,它包含了几乎所有Android开发常用的工具类,能够帮助开发者显著提升开发效率,减少重复代码编写。无论是新手还是有经验的开发者,都能从中受益,快速实现各种复杂功能。 [![Android工具类库功能展示](https://raw.gi

gitblog_00040的博客 475

android 图片处理工具类

图片工具类,可用于Bitmap, byte array, Drawable之间进行转换以及图片缩放,目前功能薄弱,后面会进行增强。如: bitmapToDrawable(Bitmap b) bimap转换为drawable drawableToBitmap(Drawable d) drawable转换为bitmap drawableToByte(Drawable d) drawable转换为

hhlin1的专栏 1202

Android BitmapUtils工具类

0、相关文章: Bitmap工具类 Android BitmapUtils工具类 Android图片的处理工具类BitmapUtils(阅读量2675,2赞) Android 中图可以用到的图片处理类 BitmapUtils(阅读量4762,1赞) public final class BitmapUtils { public static final String TAG =...

songzi1228的博客 373

Delphi 11.3 安卓相册调用及图片处理示例:快速集成图片选取功能

Delphi 11.3 安卓相册调用及图片处理示例:快速集成图片选取功能 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在移动应用开发中,图片选取功能是许多应用不可或缺的一部分。为了帮助开发者快速实现这一功能,我们推出了基于Delphi 11.3的安卓相册调用及图片处理示例项目。该项目不仅展示了如何通过Delphi编程调用安卓设备的相册功能,还详细说明了如何将用户选择...

gitblog_09715的博客 1188

安卓原创--基于 Android 开发的图片处理器App

该项目是基于Android Studio开发的图片处理应用,主要功能包括图片显示和操作两大模块。图片显示模块支持缩略图展示和全屏查看,图片操作模块提供放大、缩小、旋转、剪裁及保存功能。项目采用Java开发,运用RecyclerView、PhotoView等技术,并集成UCrop等第三方库实现专业图像处理。界面采用分区布局设计,顶部为图片显示区,底部为功能按钮区,确保操作便捷性。该应用支持实时预览编辑效果,最终可保存至本地相册,形成完整的图像处理流程。

编程乐学的博客 553

安卓上免费开源的图片处理神器!

如果你渴望一个能解决图片处理需求的“神器”,ImageToolbox正是为你而生。安卓上开源免费神器!

2301_77367065的博客 1439
上一篇: Android开发:Android6.0权限申请
下一篇: Android开发:封装GsonUtil工具类
android157
博客等级 码龄9年 193粉丝 95原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值