2016-03-28 171 views
-1

我正在製作一個自定義相機,它可以拍攝文檔並通過網絡發送。然後圖像被OCR。要通過網絡發送它們,它們的尺寸必須很小(小於100 Kb)。我首先縮小圖像,然後轉換爲灰度並以100%壓縮爲JPG。圖像尺寸仍然大於100Kb。如果我降低JPG壓縮率,質量真的很差。如何解決這個問題。下面是代碼:圖像壓縮,同時保持質量

//圖像縮放

public static Bitmap decodeSampledBitmapFromResource(byte[] data, 
                 int reqWidth, int reqHeight) { 
     final BitmapFactory.Options options = new BitmapFactory.Options(); 
     options.inJustDecodeBounds = true; 
     BitmapFactory.decodeByteArray(data, 0, data.length, options); 
     options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight); 
     options.inJustDecodeBounds = false; 
     options.inPreferredConfig = Bitmap.Config.ARGB_8888; 
     return BitmapFactory.decodeByteArray(data, 0, data.length, options); 
    } 

//圖像灰度。使用的renderScript

uchar grayscale = pixelIn.r * 0.299 + pixelIn.g * 0.587 + pixelIn.b * 0.114; 

uchar4 pixelOut; 
pixelOut.a = pixelIn.a; 
pixelOut.r = grayscale; 
pixelOut.g = grayscale; 
pixelOut.b = grayscale; 

return pixelOut; 

// JPG壓縮

bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outStream); 

回答

2

看看到this文章,我相信你會得到你想要的東西。

0

你有什麼如果你做Bitmap.CompressFormat.PNG呢?如何縮小圖像(總是按照文檔的2倍)

JPEG是全綵色的,所以轉換爲灰度並不能幫到底,GIF是8位索引或灰度,所以即使這是值得一試。

0

保持質量。壓縮圖像。使用ShortPixel。即使是10MB /圖像。

0

有三兩件事,可以在降低圖像的大小幫助: 比例縮小圖像,同時保持縱橫比:

public static Bitmap decodeSampledBitmapFromResource(byte[] data, 
                  int reqWidth, int reqHeight) { 
      final BitmapFactory.Options options = new BitmapFactory.Options(); 
      options.inJustDecodeBounds = true; 
      BitmapFactory.decodeByteArray(data, 0, data.length, options); 
      options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight); 
      options.inJustDecodeBounds = false; 
      options.inPreferredConfig = Bitmap.Config.RGB565; 
      return BitmapFactory.decodeByteArray(data, 0, data.length, options); 
     } 

刪除alpha通道,使用以下配置:

options.inPreferredConfig = Bitmap.Config.RGB565; 

使用JPEG壓縮壓縮圖像:

bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outStream); 

100沒有壓縮和 0正在100%壓縮

GrayScaling不會減小大小。