本帖最后由 objectpc 于 2013-04-20 11:55:27 编辑

解决方案 »

  1.   

    首先 isBm  判断一下这个有多大?package com.example.bitmapcompresstest;import java.io.ByteArrayOutputStream;import android.os.Bundle;
    import android.app.Activity;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.Matrix;
    import android.view.Menu;
    import android.widget.ImageView;
    import android.widget.Toast;public class MainActivity extends Activity { @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    getResources().getDrawable(R.drawable.koala123);
    // BitmapFactory.Options opts = 
    Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.koala123);
    double maxSize =100.00;//限制的文件大小
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos); 
            byte[] b = baos.toByteArray(); 
            //将字节换成KB 
            double mid = b.length/1024; 
            //判断bitmap占用空间是否大于允许最大空间  如果大于则压缩 小于则不压缩 
            if (mid > maxSize) { 
                    //获取bitmap大小 是允许最大大小的多少倍 
                    double i = mid / maxSize; 
                    //开始压缩  此处用到平方根 将宽带和高度压缩掉对应的平方根倍 (1.保持刻度和高度和原bitmap比率一致,压缩后也达到了最大大小占用空间的大小) 
                    bmp = zoomImage(bmp, bmp.getWidth() / Math.abs(i), 
                     bmp.getHeight() / Math.abs(i)); 
            }
            ImageView imgView = (ImageView)findViewById(R.id.img);
            imgView.setImageBitmap(bmp);
    //        Toast.makeText(this, "getRowBytes"+bmp.getRowBytes(), 0).show();
            ByteArrayOutputStream baos2 = new ByteArrayOutputStream(); 
    bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos2); 
            byte[] b2 = baos2.toByteArray(); 
            Toast.makeText(this, ""+b2.length/1024, 0).show();
    }  public static Bitmap zoomImage(Bitmap bgimage, double newWidth, 
            double newHeight) { 
    // 获取这个图片的宽和高 
    float width = bgimage.getWidth(); 
    float height = bgimage.getHeight(); 
    // 创建操作图片用的matrix对象 
    Matrix matrix = new Matrix(); 
    // 计算宽高缩放率 
    float scaleWidth = ((float) newWidth) / width; 
    float scaleHeight = ((float) newHeight) / height; 
    // 缩放图片动作 
    matrix.postScale(scaleWidth, scaleHeight); 
    Bitmap bitmap = Bitmap.createBitmap(bgimage, 0, 0, (int) width, 
                    (int) height, matrix, true); 
    return bitmap; 

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
    }}
      

  2.   

    http://blog.csdn.net/tf576776047/article/details/8143456 我的代码经过验证了 可以达到压缩的目的 至于压缩到多大还需要你调整,这个链接 是来源!
      

  3.   

    任何压缩对图片的质量都是有损失的,这是JPG的算法决定的。只是这种损失在不严重的情况下肉眼不易察觉,但放大后仔细分辨可以发现质量上的损失。
    如果你又想保证质量又想保证大小 建议换成png格式试试看  不过这样 颜色上 可能会变得不那么鲜艳了
      

  4.   


    image.compress(Bitmap.CompressFormat.JPEG, 100, baos); 你这里把 100换成别的数字 就是你要的效果了
      

  5.   

    还有纠正一点 png 比 jpg 大 这个我记错了
      

  6.   

    我本地测试 是通过的 700+k的文件 压缩 保存 , 图片大小不变的前提下 只有 60+k  然后我将我处理的图片 通过 CSDN 上传到网盘 大小显示 还是60+k  我也不知道啥情况了,不好意思哥们,帮不了了。
      

  7.   

    Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.koala123,opts);
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    bmp.compress(Bitmap.CompressFormat.JPEG, 30, baos); 
            byte[] b = baos.toByteArray(); 
            try {
    OutputStream ops = new FileOutputStream("/mnt/emmc/bbbb.jpg");
    ops.write(b);
    ops.close();
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
      

  8.   

    上传前
    压缩前1024x768
    压缩后1024x768
    上传后
    用搜狗浏览器预览图片右键点击图片选择图片属性
    大小 41060 字节
    维度 773   x   580   pixels
    选择图片下载到桌面 
    文件大小68.1K
    尺寸1024 X768
      

  9.   

    把你上传的相同照片   大小不一样的 下载下来 然后   去 http://exif.cn/ 这个网站 比较一下详细信息 看看是什么问题 这个 估计你要去网络那边问了 关于上传 我也不太清楚 
      

  10.   

    332401890 谢谢!备注写CSDN 就可以了 公司 不能上QQ 回去加吧
      

  11.   

    加上了,我这个问题也算差不多了,我最后还是用了你的方法,差不多能控制在100K左右,而且质量相对其它的来说,也要强一些。谢谢了,不过又出现了一个问题,就是ViewPager的问题,比如我放进去10张图片,来回滑动,但是滑动到后面的时候,前面的图片就被销毁了,图片全都做了控制,以前也没遇到过这个问题