0

我正在寫一些文字的圖像將被壓縮。在圖像上寫入文本而不增加大小?

圖片SIE 2048 x 1536東西PX

我第一次嘗試寫第一 它拋出內存溢出異常

的話,我首先將其壓縮到1024 x 768

然後寫上的文字圖片

它Image KB's從100KB增加到640KB

在寫文字,我可以compromise在壓縮質量的Image quality but not the text Quality

設置爲30文本還要downsample

問題:

  1. 沒有任何過程write then compressCompress then Write
    不更改ImageSize(以KB爲單位)的文本?

  2. 我希望儘可能減少圖像大小(以KB爲單位)?

  3. 而且當inSampleSize設置爲3時,它不起作用,並且只有使用1,2,4的2048,1024,512的圖像被創建爲輸出我想要一些尺寸爲700px的圖像保持縱橫比。

代碼:。對於StampingImage

public void stampMyImage(String filePath, String text, Bitmap bitmap) { 
     String[] str = text.split("\n"); 
     filePath = "/sdcard/geoTag/1imagelong_001_001_0002_0002_1135_130708144229.jpg"; 
     bitmap = BitmapFactory.decodeFile(filePath); 
     if (bitmap != null) { 
      Bitmap dest = null; 
      try { 
       dest = bitmap.copy(bitmap.getConfig(), true); 
      } catch (OutOfMemoryError e1) { 
       Log.e("Exception", e1.getMessage()); 
       e1.printStackTrace(); 
      } catch (Error e) { 
       Log.e("Exception", e.getMessage()); 
       e.printStackTrace(); 
      } 
      Canvas cs = new Canvas(dest); 
      Typeface tf = Typeface.create("Verdana", Typeface.BOLD); 
      Paint tPaint = new Paint(); 
      tPaint.setAntiAlias(true); 
      tPaint.setTextSize(40); 
      tPaint.setTextAlign(Align.LEFT); 
      tPaint.setTypeface(tf); 
      tPaint.setColor(Color.RED); 
      tPaint.setStyle(Style.FILL_AND_STROKE); 
      cs.drawBitmap(bitmap, 0f, 0f, null); 
      float textHeight = tPaint.measureText("yY"); 
      int index = 0; 
      for (String Oneline : str) { 
       cs.drawText(Oneline, 20f, (index + 1) * textHeight + 25f, 
         tPaint); 
       index++; 
      } 
      try { 
       FileOutputStream fos = new FileOutputStream(
         "/sdcard/timeStampedImage.jpg"); 
       dest.compress(Bitmap.CompressFormat.JPEG, 100, fos); 
      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

方法

方法定期壓縮

BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inSampleSize = 4; 
    int quality = 70; 
    myBitmapClose = BitmapFactory.decodeFile(imgUriClose.getPath(),options); 
    if (myBitmapClose != null) { 
     File sdImageMainDirectory = new File(imgUriClose.getPath()); 
     try { 
     FileOutputStream fileOutputStream = new FileOutputStream(sdImageMainDirectory); 
     BufferedOutputStream bos = new BufferedOutputStream(fileOutputStream); 
     myBitmapClose.compress(CompressFormat.JPEG, quality, bos); 
     if (bos != null) { 
     bos.flush(); 
     bos.close(); 
     } 
     if (fileOutputStream != null) { 
     fileOutputStream.flush(); 
     fileOutputStream.close(); 
     } 
     } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
     } catch (IOException e) { 
     e.printStackTrace(); 
     } 

圖像樣本 The Sample Image with Text Written on it

看到一些有用的鏈接我也跟着

How to write text on an image in Java (Android)

Generate a image with custom text in Android

Drawing Text (TimeStamp) Over image captured from Standalone Camera

+0

你真的需要將文本保存爲圖像的一部分嗎?我會將圖像的描述保存爲一個文件中圖像的文本和字節。然後每次你想要顯示你閱讀和文本可以顯示到任何屏幕 – PedroAGSantos

+0

我可以做什麼兄弟所有的信息都準備好在數據庫中,但我的老闆想要它,所以我能做什麼 是的,我想要做什麼我已經寫 我已經顯示使用圖像在div的背景在網絡上發送通過移動 – Trikaldarshi

回答

0

你的問題是你的應用程序所允許的分配內存。 將圖像加載到位圖變量(decodeFile或bitmap.copy)時,嘗試設置選項以降低圖像質量。例如,當你做bitmap.copy嘗試設置像這樣的選項:

bitmap.copy(Bitmap.Config.ARGB_4444, true); 
+0

同樣的錯誤,我已經嘗試過,所以我去了bitmap.getConfig() – Trikaldarshi

+0

主要問題是我壓縮它,首先寫和壓縮有太多東西都是用相同的方式寫的,也許是一些線性行爲的方法 – Trikaldarshi