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平台图片处理的原理,还能学习到如何将这些技术应用到实际开发中,使我们的应用更加完美和强大。 阅读详情

相关推荐

OBS技术深度剖析:从开源直播工具到专业制作引擎的进化之路

本文深入剖析了开源直播软件OBS的技术架构与发展历程。从2012年诞生至今,OBS已成长为直播领域的事实标准,其成功源于模块化设计和开源协作模式。文章详细解析了OBS的核心技术:1) 分层架构与插件系统,2) GPU加速的渲染管线,3) 智能音频处理,4) 多平台编码优化。同时探讨了虚拟摄像头、浏览器源等高级功能的实现原理,并提供了性能优化方案和硬件配置建议。随着AI、WebRTC等新技术发展,OBS将持续引领实时内容创作工具的创新,为开发者和创作者提供更强大的技术支持。

程序猿老樊的博客 325

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

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

实力派,无需多言! 615

Docker部署 SRS rtmp/flv流媒体服务器

SRS(Simple Realtime Server)是一款开源的流媒体服务器,具有高性能、高可靠性、高灵活性的特点,能够支持直播、点播、转码等多种流媒体应用场景。SRS 不仅提供了流媒体服务器,还提供了适用于多种平台的客户端 SDK 和在线转码等辅助服务,是一款十分强大的流媒体解决方案。

m0_56659620的博客 4869

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

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

沐雨风栉 6731

100天精通Python(可视化篇)——第109天:Pyecharts绘制各种常用地图(参数说明+代码实战)

100天精通Python(可视化篇)——第109天:Pyecharts绘制各种常用地图(参数说明+代码实战)

努力让自己发光,对的人才能迎着光而来 8万+

Plant Simulation与ABB机器人虚实结合

Plant Simulation与ABB机器人虚实结合

santayana的专栏 1869

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

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

Metis100的专栏i6zHW5lX(fDT 2130

华为OD机试双机位A卷 - VLAN资源池 (C++ & Python & JAVA & JS & GO)

华为OD机试2025双机位A卷 VLAN资源池,提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解

qq_45776114的博客 878

Android开发中图片处理

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

wayne214的博客 1022

【OpenClaw企业级智能体实战】第16篇:电商“龙虾”掘金记:用OpenClaw实现小红书/抖音/淘宝全自动矩阵运营(2026实测版)

2026年,OpenClaw(小龙虾)已成为电商运营的核心效率工具——从公众号文案3分钟生成到TikTok爆款视频1小时复刻,从多平台内容同步到自动比价加购,彻底重构了电商运营的工作模式。本文基于真实商业案例(元岳科技、TikTok跨境卖家、淘宝MCP工具),系统拆解电商智能体的落地路径:先详解OpenClaw在电商场景的核心原理与变现模式(代部署、模板售卖、轻定制、内容套利),再提供阿里云/本地双部署方案,完整实现小红书/抖音/淘宝的自动化运营(热点抓取、内容生成、多平台分发、数据分析)。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2285

组建高效AI开发团队:角色、技能与协作

在当今科技飞速发展的时代,人工智能(AI)已经成为各个领域的核心驱动力。组建高效的AI开发团队对于企业和科研机构来说至关重要,它能够推动创新、提高竞争力、实现业务目标。本文的目的在于为那些希望组建或优化AI开发团队的管理者、技术负责人以及相关从业者提供全面的指导。范围涵盖了团队角色的定义、所需技能的分析、团队协作的策略,以及实际项目中的应用和相关资源的推荐。本文将首先介绍AI开发团队的核心概念与联系,包括团队角色、技能和协作之间的关系。接着阐述核心算法原理和具体操作步骤,结合数学模型和公式进行详细讲解。

2502_91592937的博客 995

安卓开发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

tsmc12: m0po max length问题(H384.M0_PO.L.1)

手动调整可以挪cell,制造上下两个row相对的至少一个site的空间,通过插普通filler来解决,这里需要注意的是,tsmc12有via0的规则,需要让via0落在via0 grid上。在pt eco之后会有一些m0po max length问题出现,大部分问题都可以通过替换decap来解决,少部分由于局部density过高,需要手动调整。更多学习内容请关注「拾陆楼」知识星球。#ICC2中替换decap的参考脚本。

m0_61544122的博客 790

ToolsFinal 项目常见问题解决方案

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

gitblog_00517的博客 565

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

安卓开发图片处理工具类

代码如下: 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

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

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

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

JackChan 3万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

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、付费专栏及课程。

余额充值