2015-06-01 2 views
0

Edit 2: из результата я получил в своем первом редактировать, в нижней части поста, вопрос находится где-то на этой линии или ниже:. imageEncodedSigneAgent = Base64.encodeToString(byteSigneAgent,Base64.NO_WRAP); " /редактироватьЗапись Bitmap в сообщение MIME

I . попытался написать растровое изображение в сообщении MIME, как Base64 строки в PNG формате к сожалению, сообщение считается нуль (окна просмотра не может прочитать его, говорит размер 0kb)

Мой код:

 Bitmap bitmapSigne = BitmapFactory.decodeFile(fileSigne.getAbsolutePath()); 
     if (Params.tagFgDebug && fgDebugLocal){Log.i(Params.tagGen, tagLocal + "createEMLInt - bitmapSigne width = " + bitmapSigne.getWidth());}; 
     ByteArrayOutputStream baos = new ByteArrayOutputStream(bitmapSigne.getByteCount()); 
     if (!bitmapSigne.compress(Bitmap.CompressFormat.PNG, 100, baos)) { 
      new TException(tagLocal, "Compress bitmapSign == ", "false"); 
     } 
     byte[] byteSigne = baos.toByteArray(); 
     if (Params.tagFgDebug && fgDebugLocal){Log.i(Params.tagGen, tagLocal + "createEMLInt - byteSigne size = " + byteSigne.length);}; 
     String imageEncodedSigne = Base64.encodeToString(byteSigne,Base64.NO_WRAP); 
     if (Params.tagFgDebug && fgDebugLocal){Log.i(Params.tagGen, tagLocal + "createEMLInt - imageEncodedSigne size = " + imageEncodedSigne.length());}; 
     mime.append(imageEncodedSigne); 
     mime.append("\r\n"); 

Это делает строки base64 в моем сообщении MIMI, но это ca не читаться и, может быть, немного короче. Я думаю, что это могут быть метаданные вокруг PNG (из того, что я прочитал после того, как я его расшифровал).

Я проверил, чтобы сохранить изображения непосредственно в файл, и он прекрасно работает:

 // test to retrieve BitMap as PNG 
     String signePath2 = Baseline.strSdExternalPath + File.separator + Params.MIF_REP; 
     File file = new File(signePath2, "sign.png"); 
     FileOutputStream fOut = new FileOutputStream(file); 
     bitmapSigne.compress(Bitmap.CompressFormat.PNG, 85, fOut); 
     fOut.flush(); 
     fOut.close(); 
     // test to retrieve BitMap as PNG 

я правильно получить изображение Обращает ранее.

Я также попытался (идея от другого SO вопрос: Converting bitmap to byte array, to string, then all the way back), чтобы переконвертировать строку, в растровое изображение и оно не :(

  byte[] newImageBytes = imageEncodedSigne.getBytes(); 
     // Convert byte[] back to bitmap 
     Bitmap bitmapReconverted = BitmapFactory.decodeByteArray(newImageBytes, 0, newImageBytes.length); 
     File fileReconverted = new File(signePath2, "signReConverted.png"); 
     fOut = new FileOutputStream(fileReconverted); 
     bitmapReconverted.compress(Bitmap.CompressFormat.PNG, 100, fOut); 
     fOut.flush(); 
     fOut.close(); 

Что я здесь отсутствует Почему я не правильно получить байт? данные и получить читаемую строку в base64?

Любой помощь ценит!

Я использовал Base64.DEFAULT раньше, чтобы не лучших результатов. Я прочитал несколько пост и один связан ближе всего к тому, что я пытаюсь сделать , к сожалению, его проблема была с плохим использование '' equalTo

EDIT: Так что я пытался сделать Bitmap -> байт [] -> Bitmap и она работала:

Bitmap bitmapReconverted = BitmapFactory.decodeByteArray(byteSigne, 0, byteSigne.length); 
     File fileReconverted = new File(signePath2, "signReConverted.png"); 
     fOut = new FileOutputStream(fileReconverted); 
     bitmapReconverted.compress(Bitmap.CompressFormat.PNG, 85, fOut); 
     fOut.flush(); 
     fOut.close(); 

Edit 3: результат MIME для документации цели!

Content-Type: image/png 

Content-Disposition: form-data; имя = "тело", имя файла = "20150601.190623_00008_SIGN.PNG" Content-Transfer-Encoding: base64 iVBORw0KGgoAAAANSUhEUgAAAOYAAABuCAIAAAC86/hZAAAA

+0

сторона примечание: 'новое TException (...)', по-видимому, ничего не делает. Возможно, вы имеете в виду 'throw new TException (...)' – njzk2

+0

Да, да. Вы не можете это знать, но это обычная оболочка Exception, может быть, это плохой дизайн, чтобы не использовать метод «throw». – Poutrathor

+0

это, возможно, не очень хороший дизайн. Это не ясно из отправленного кода, но может быть, что создание объекта не полезно. Кроме того, создание подкласса исключения помогает с его улавливанием. И ключевое слово 'throw' мгновенно объясняет, что происходит. – njzk2

ответ

0

Все правильно, за исключением этой части:

Content-Disposition: form-data; name="body";filename="20150601.190623_00008_SIGN.PNG" 
Content-Transfer-Encoding: base64 
iVBORw0KGgoAAAANSUhEUgAAAOYAAABuCAIAAAC86/hZAAAAA3NCSVQICAjb4U/gAAAZsEl 

Это должно быть написано, как это :

Content-Disposition: form-data; name="body";filename="20150601.190623_00008_SIGN.PNG" 
Content-Transfer-Encoding: base64 

iVBORw0KGgoAAAANSUhEUgAAAOYAAABuCAIAAAC86/hZAAAAA3NCSVQICAjb4U/gAAAZsEl 

Обратите внимание на дополнительную строку? Да, это все люди.