andriod提供了一些方法如下:
压缩图片质量:
bitmap.compress(Bitmap.CompressFormat.JPEG, quality, fos);
其中的quality为0~100, 可以压缩图片质量, 不过对于大图必须对图片resize
这个是等比例缩放:
bitmap = Bitmap.createScaledBitmap(bitmap, width, height, false);
这个是截取图片某部分:
压缩图片质量:
bitmap.compress(Bitmap.CompressFormat.JPEG, quality, fos);
其中的quality为0~100, 可以压缩图片质量, 不过对于大图必须对图片resize
这个是等比例缩放:
bitmap = Bitmap.createScaledBitmap(bitmap, width, height, false);
这个是截取图片某部分:
bitmap = Bitmap.createBitmap(bitmap, x, y, width, height);
这段代码很多网站都有转载,在这里是为了注释:较大的图片文件上传到服务器一般都需要压缩调整,保证数据通信的效率是最主要的。
//对图片进行压缩 BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; //获取这个图片的宽和高 Bitmap bitmap = BitmapFactory.decodeFile("/sdcard/dcim/Camera/hello.jpg",options);//此时返回bm为空 options.inJustDecodeBounds =false; //计算缩放比 int be = (int)(options.outHeight / (float)200); if(be <= 0) be =1; options.inSampleSize =be; //重新读入图片,注意这次要把options.inJustDecodeBounds设为false哦 bitmap = BitmapFactory.decodeFile("/sdcard/dcim/Camera/hello.jpg",options); int w = bitmap.getWidth(); int h=bitmap.getHeight(); System.out.println(w+" "+h); myImageView.setImageBitmap(bitmap); //保存入sdCard File file2= new File("/sdcard/dcim/Camera/test.jpg"); try { FileOutputStream out = new FileOutputStream(file2); if(bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out)){ out.flush(); out.close(); } } catch (Exception e) { // TODO: handle exception } //读取sd卡 File file =new File("/sdcard/dcim/Camera/test.jpg"); int maxBufferSize = 16 * 1024; int len = 0; ByteArrayOutputStream outStream = new ByteArrayOutputStream(); BufferedInputStream bufferedInputStream; try { bufferedInputStream = new BufferedInputStream(new FileInputStream(file)); int bytesAvailable = bufferedInputStream.available(); int bufferSize = Math.min(bytesAvailable, maxBufferSize); byte[] buffer = new byte[bufferSize]; while ((len = bufferedInputStream.read(buffer)) != -1) { outStream.write(buffer, 0, bufferSize); } data = outStream.toByteArray(); outStream.close(); bufferedInputStream.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }