`

压缩图片

 
阅读更多
第一:我们先看下质量压缩方法:

 

Java代码  收藏代码

    private Bitmap compressImage(Bitmap image) {  
      
            ByteArrayOutputStream baos = new ByteArrayOutputStream();  
            image.compress(Bitmap.CompressFormat.JPEG, 100, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中  
            int options = 100;  
            while ( baos.toByteArray().length / 1024>100) {  //循环判断如果压缩后图片是否大于100kb,大于继续压缩         
                baos.reset();//重置baos即清空baos  
                image.compress(Bitmap.CompressFormat.JPEG, options, baos);//这里压缩options%,把压缩后的数据存放到baos中  
                options -= 10;//每次都减少10  
            }  
            ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());//把压缩后的数据baos存放到ByteArrayInputStream中  
            Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);//把ByteArrayInputStream数据生成图片  
            return bitmap;  
        }  

 

第二:图片按比例大小压缩方法(根据路径获取图片并压缩):

 

 
Java代码  收藏代码

    private Bitmap getimage(String srcPath) {  
            BitmapFactory.Options newOpts = new BitmapFactory.Options();  
            //开始读入图片,此时把options.inJustDecodeBounds 设回true了  
            newOpts.inJustDecodeBounds = true;  
            Bitmap bitmap = BitmapFactory.decodeFile(srcPath,newOpts);//此时返回bm为空  
              
            newOpts.inJustDecodeBounds = false;  
            int w = newOpts.outWidth;  
            int h = newOpts.outHeight;  
            //现在主流手机比较多是800*480分辨率,所以高和宽我们设置为  
            float hh = 800f;//这里设置高度为800f  
            float ww = 480f;//这里设置宽度为480f  
            //缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可  
            int be = 1;//be=1表示不缩放  
            if (w > h && w > ww) {//如果宽度大的话根据宽度固定大小缩放  
                be = (int) (newOpts.outWidth / ww);  
            } else if (w < h && h > hh) {//如果高度高的话根据宽度固定大小缩放  
                be = (int) (newOpts.outHeight / hh);  
            }  
            if (be <= 0)  
                be = 1;  
            newOpts.inSampleSize = be;//设置缩放比例  
            //重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了  
            bitmap = BitmapFactory.decodeFile(srcPath, newOpts);  
            return compressImage(bitmap);//压缩好比例大小后再进行质量压缩  
        }  

 

第三:图片按比例大小压缩方法(根据Bitmap图片压缩):

 
Java代码  收藏代码

    private Bitmap comp(Bitmap image) {  
          
        ByteArrayOutputStream baos = new ByteArrayOutputStream();         
        image.compress(Bitmap.CompressFormat.JPEG, 100, baos);  
        if( baos.toByteArray().length / 1024>1024) {//判断如果图片大于1M,进行压缩避免在生成图片(BitmapFactory.decodeStream)时溢出    
            baos.reset();//重置baos即清空baos  
            image.compress(Bitmap.CompressFormat.JPEG, 50, baos);//这里压缩50%,把压缩后的数据存放到baos中  
        }  
        ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());  
        BitmapFactory.Options newOpts = new BitmapFactory.Options();  
        //开始读入图片,此时把options.inJustDecodeBounds 设回true了  
        newOpts.inJustDecodeBounds = true;  
        Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, newOpts);  
        newOpts.inJustDecodeBounds = false;  
        int w = newOpts.outWidth;  
        int h = newOpts.outHeight;  
        //现在主流手机比较多是800*480分辨率,所以高和宽我们设置为  
        float hh = 800f;//这里设置高度为800f  
        float ww = 480f;//这里设置宽度为480f  
        //缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可  
        int be = 1;//be=1表示不缩放  
        if (w > h && w > ww) {//如果宽度大的话根据宽度固定大小缩放  
            be = (int) (newOpts.outWidth / ww);  
        } else if (w < h && h > hh) {//如果高度高的话根据宽度固定大小缩放  
            be = (int) (newOpts.outHeight / hh);  
        }  
        if (be <= 0)  
            be = 1;  
        newOpts.inSampleSize = be;//设置缩放比例  
        //重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了  
        isBm = new ByteArrayInputStream(baos.toByteArray());  
        bitmap = BitmapFactory.decodeStream(isBm, null, newOpts);  
        return compressImage(bitmap);//压缩好比例大小后再进行质量压缩  
    }  
转:http://104zz.iteye.com/blog/1694762

分享到:
评论

相关推荐

    kindeditor(带压缩图片功能)

    在这个“kindeditor(带压缩图片功能)”的压缩包中,很可能包含了已经集成图片压缩功能的KindEditor源码或者插件。 在Web开发中,富文本编辑器是非常常见的一种组件,用于让用户在网页上像在桌面应用中那样编辑文本...

    java各种方式压缩图片

    通过创建一个目标尺寸的BufferedImage对象,然后使用`Graphics2D`的`drawImage()`方法将原图绘制到新尺寸的BufferedImage上,从而实现按指定宽度和高度压缩图片。 ```java import java.awt.Graphics2D; import java...

    C# .Net压缩图片,大小仅为原图的1/10

    ### C# .Net压缩图片,大小仅为原图的1/10 在现代软件开发过程中,尤其是在处理多媒体数据时,图像处理技术变得尤为重要。很多时候,我们需要处理大量的图像数据,而这些图像往往占用较大的存储空间。因此,如何有效...

    H5 上传图片 拍照 压缩图片

    这个过程涉及到多个技术环节,包括捕获图像、压缩图片、转换数据格式以及将图片文件提交到服务器。以下是对这些知识点的详细解释: 1. **HTML5 Camera API**:H5提供了`&lt;input type="file"&gt;`元素的`accept`属性,...

    鲁班Luban压缩图片(仿微信朋友圈压缩图片)

    - 图片分享:在图片分享功能中,压缩图片可减少流量消耗,提升用户体验。 - 数据备份:在备份大量图片时,压缩可以节省存储空间。 综上所述,Luban是一个针对Android平台的高效图片压缩工具,它通过智能压缩算法...

    Java+PDF批量压缩图片格式的PDF档(源码Demo)

    Java批量压缩图片格式的PDF档(源码Demo) 适用:仅针对纯图片型的pdf(类似扫描版)进行压缩 原理:压缩图片然后再另存成新文件 实例如下: ├── META-INF │ └── MANIFEST.MF ├── pom.xml └── src ├...

    Android基于JNI压缩图片高效不失真

    在Android开发中,图片处理是一项常见且重要的任务,特别是在移动设备资源有限的情况下,高效地压缩图片以节省存储空间和提高应用性能是必要的。本篇主要介绍如何基于JNI(Java Native Interface)技术实现图片的...

    layer+压缩图片js

    "layer+压缩图片js" 是一个结合了Layer弹框插件和图片压缩功能的JavaScript解决方案,它允许开发者在用户选择图片后立即进行压缩,然后再进行上传。下面我们将详细探讨这个方案所涉及的关键知识点。 1. **Layer弹框...

    opencv压缩图片,供初学者使用

    在本文中,我们将深入探讨如何使用OpenCV来压缩图片,这对于初学者来说是一个非常实用的知识点。 首先,我们需要理解图片压缩的基本概念。图片压缩主要是为了减少存储空间,有两种主要的压缩类型:无损压缩和有损...

    delphi源码压缩图片bmp,jpg至640,480jpg修正

    在这个场景中,"delphi源码压缩图片bmp,jpg至640,480jpg修正"涉及到的核心知识点包括: 1. **Delphi编程**:Delphi是基于Pascal语言的IDE,它提供了快速的应用程序开发(RAD)环境,用于创建桌面、移动和Web应用...

    java代码保存宽高不变压缩图片(失真不大).docx

    EGCodec.createJPEGEncoder(out); JPEGEncodeParam param = ...总的来说,这段Java代码提供了一个实用的工具,能够在不失真过大(通过调整压缩质量)的前提下,根据图片原始大小智能地压缩图片,满足不同场景的需求。

    图片压缩软件【压缩图片】

    "图片压缩软件【压缩图片】"是一款专注于减小图片文件大小的应用程序,它通过特定的算法在保持图像质量可接受的前提下,降低文件的存储需求。 图片压缩主要分为两种类型:有损压缩和无损压缩。有损压缩如JPEG,会在...

    Delphi 10.1 Berlin 压缩图片FMX

    以下是一个简单的示例代码,展示如何使用TBitmap.Canvas.DrawBitmap来压缩图片: ```pascal uses FMX.Graphics; var OriginalBitmap, CompressedBitmap: TBitmap; SourceRect, DestinationPoint: TRectF; begin...

    PHP 按一定比例压缩图片,保持清晰度

    为了实现按比例压缩图片的同时保持清晰度,我们需要采用一些特殊的技术和策略。以下将详细介绍如何在PHP中实现这一目标。 1. 图片压缩原理: 图片压缩主要分为有损压缩和无损压缩两种。有损压缩(如JPEG)会丢失...

    vb6在内存里实现JPG压缩图片

    总结来说,VB6在内存中实现JPG压缩图片是一项实用的技术,通过结合GDI+、第三方库或Windows API,可以在不依赖磁盘操作的情况下完成图像压缩,优化了网络传输和数据存储。虽然VB6现在可能已显得有些过时,但其处理...

    delphi源码压缩图片bmp,jpg至480,640jpg

    在IT行业中,图像处理是一项非常重要的技术,尤其是在移动设备和网络应用中,高效地压缩图片以减少存储空间和传输成本是必要的。本话题主要聚焦于使用Delphi编程语言进行图片(BMP和JPG格式)的压缩,目标是将图片...

    c#压缩图片宽高和DPI

    用c#语言开发,选择要压缩的图片路径,选择要保存压缩图片的路径,可以压缩宽高,比如原来是1500*1500,填写压缩5倍,那么就压缩成300*300了,还可以压缩DPI,分辨率保持不变,比如图片原大小由500kb,可以压缩到300...

    java压缩图片文件大小

    java 开发压缩图片文件大小,2m--&gt;200k 不是压缩宽高的

    压缩图片工具,只支持png压缩.rar

    "压缩图片工具,只支持png压缩.rar"这个压缩包文件提供了一个专门针对PNG格式图片进行压缩的工具。PNG(Portable Network Graphics)是一种无损压缩的位图格式,广泛用于网页设计、图形用户界面以及需要透明背景的...

    js使用lrz压缩图片,上传七牛

    要使用lrz压缩图片并上传至七牛云,首先需要在七牛云注册账号,创建空间(Bucket),获取Access Key和Secret Key。然后,在前端项目中引入lrz库,并配置七牛的上传凭证。当用户选择图片后,lrz会自动进行压缩,压缩...

Global site tag (gtag.js) - Google Analytics