Android 세 가지 흔 한 그림 압축 방식

6619 단어 Android그림 압축
다음은 여러분 에 게 비교적 흔히 볼 수 있 는 압축 방식 3 가 지 를 가 져 다 드 리 겠 습 니 다.
먼저 데이터 한 세트 를 드 리 겠 습 니 다.
원본 그림:width:2976;height:2976
원 도 실제:---byte:2299820 Mb:2.19328
질량 압축 size---:byte:1599831 kb:1562.33496
비례 압축 size---:byte:191707 kb:187.21387
노반 압축 size--->:byte:143792 kb:140.42188
압축 효과:노반 압축>비례 압축>품질 압축
1.품질 압축

 public void getBitmap(String imgPath, String outPath) {  
        BitmapFactory.Options newOpts = new BitmapFactory.Options();  
        newOpts.inJustDecodeBounds = false;  
        newOpts.inPurgeable = true;  
        newOpts.inInputShareable = true;  
        // Do not compress  
        newOpts.inSampleSize = 1;  
        newOpts.inPreferredConfig = Config.RGB_565;  
        storeImage(bitmap, outPath); //    
    }
주의 하 다.
4.567917.품질 압축 은 그림 의 픽 셀 을 감소 시 키 지 않 는 다.이것 은 픽 셀 을 유지 하 는 전제 에서 그림 의 깊이 와 투명 도 를 바 꾸 는 등 그림 을 압축 하 는 목적 을 달성 하 는 것 이다.이것 이 바로 이 방법 을 품질 압축 방법 이 라 고 부 르 는 이유 이다.그래서 이런 방법 은 그림 의 크기 를 줄 이지 않 을 가능성 이 높다.
  • bit.copress(CompressFormat.PNG,quality,baos)라면;이러한 png 형식 은 quality 가 작용 하지 않 습 니 다.bytes.length 는 변 하지 않 습 니 다.png 그림 은 손상 이 없 기 때문에 압축 할 수 없습니다
  • 그림 저장
    
    /**
         *  bitmap          
         *
         * @param bitmap
         * @param outPath        
         * @throws FileNotFoundException
         */
        public static boolean storeImage(Bitmap bitmap, String outPath) throws FileNotFoundException {
            FileOutputStream os = new FileOutputStream(outPath);
            boolean compressResult = bitmap.compress(Bitmap.CompressFormat.JPEG, 100, os);
            return compressResult;
        }
    2.비례 압축(사이즈 압축,샘플링 율 압축)
    
    /**
         *      
         *
         * @param path         
         * @param targetW      
         * @param targetH      
         * @return            
         */
        public static String compressScale(String path,, String outPath, int targetW, int targetH) throws FileNotFoundException {
            //   option  
            BitmapFactory.Options options = new BitmapFactory.Options();
            // inJustDecodeBounds   true,     option decode   Bitmap null,  
            //         option   
            options.inJustDecodeBounds = true;
            //   bitmap null  
            Bitmap bitmap = BitmapFactory.decodeFile(path, options);
            int inSampleSize = 1; // 1      
            //           
            int inSampleSizeW = options.outWidth / targetW;
            int inSampleSizeH = options.outHeight / targetH;
            //             ,      ,     3       ,   
            //        ,          ,             
            if (inSampleSizeW > inSampleSizeH) {
                inSampleSize = inSampleSizeW;
            } else {
                inSampleSize = inSampleSizeH;
            }
            //       inJustDecodeBounds  false,  Bitmap null  
            options.inJustDecodeBounds = false;
            //       (   )  
            options.inSampleSize = inSampleSize;
            bitmap = BitmapFactory.decodeFile(path, options);
            boolean isSuccess = storeImage(bitmap, outPath);
            if (isSuccess) {
                return outPath;
            }
            return "";
        }
    이 방법 은 그림 의 샘플링 율 을 설정 하여 그림 픽 셀 을 낮 추고 그림 픽 셀 의 크기 를 줄 이 는 것 이다.
    그렇다면 나 는 어떻게 그림 압축 전후의 크기 를 얻 었 을 까?
    메모:이 그림 의 크기 는 그림 의 실제 크기 를 말 합 니 다.bitmap 가 메모리 에서 차지 하 는 크기 가 아니 라 압축 효 과 를 보면 그림 이 파일 에서 차지 하 는 크기 를 봐 야 합 니 다.
    
    /**
         *         
         *
         * @param imgPath      
         * @return        ,  byte
         */
        public static int getFileSize(String imgPath) {
            int size = 0;
            try {
                FileInputStream fis = new FileInputStream(new File(imgPath));
                size = fis.available();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return size;
        }
    3.노반 압축(추천)
    노반 압축 은 하나의 알고리즘 에 따라 얻어 진 것 으로 압축 효 과 는 기본적으로 위 챗 과 일치 하 며 차이 가 많 지 않 고 200 k 이내 이 며 그림 은 진실 을 잃 지 않 는 다.
    노반 압축:
    https://github.com/Curzibn/Luban
    build.gradle 의존 도 추가
    
    compile 'top.zibin:Luban:1.1.3'
    
    private void lunBanPress(String path) {
            String pressPath = Environment.getExternalStorageDirectory().getPath();
            Luban.with(this)
                    .load(path)                                   //           
                    .ignoreBy(100)                                  //           
                    .setTargetDir(pressPath)                        //            
                    .setCompressListener(new OnCompressListener() { //    
                        @Override
                        public void onStart() {
                            // TODO        ,         loading UI
                            Log.i(TAG, "onStart:       ");
                        }
    
                        @Override
                        public void onSuccess(File file) {
                            // TODO        ,          
                            Glide.with(activity).load(file).into(iv2);
                            Log.i(TAG, "onSuccess:        :");
                            try {
                                int size = new FileInputStream(file).available();
                                Log.i("tag", "     size--->:" + "byte:" + size + "    kb:"
                                        + (float) size / 1024);
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }
    
                        @Override
                        public void onError(Throwable e) {
                            // TODO             
                            Log.i(TAG, "onError:       ");
                        }
                    }).launch();    //    
        }
    원본 주소:
    https://github.com/zhouxu88/ImgCompress
    여기 서 끝 이 야~
    이상 은 안 드 로 이 드 세 가지 흔히 볼 수 있 는 이미지 압축 방식 의 상세 한 내용 입 니 다.안 드 로 이 드 이미지 압축 에 관 한 자 료 는 다른 관련 글 을 주목 하 세 요!

    좋은 웹페이지 즐겨찾기