将位图写入 MIME 消息
Write Bitmap to a MIME message
编辑 2:根据我在第一次编辑中得到的结果,在 post 的底部,问题出在这一行或以下的某处:imageEncodedSigneAgent = Base64.encodeToString(byteSigneAgent,Base64.NO_WRAP);
"
/编辑。
我尝试在 MIME 消息中写入位图,作为 PNG 格式的 Base64 字符串。遗憾的是,该消息被认为是空的(windows 查看者无法阅读它,说大小是 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");
这确实在我的 MIMI 消息中写入了 base64 行,但它无法读取并且可能有点短。我认为它可能是 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没有更好的结果。我读了几本 post,链接的那个最接近我想做的,遗憾的是他的问题是 'equalTo'
的使用不当
编辑:所以我尝试做 Bitmap -> bytes[] -> 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();
编辑 3:用于文档目的的 MIME 结果!
Content-Type: image/png
内容配置:表单数据;名称="body";文件名=“20150601.190623_00008_SIGN.PNG”
内容传输编码:base64
iVBORw0KGgoAAAANSUhEUgAAAOYAAABuCAIAAAC86/hZAAAA
除这部分外,一切都是正确的:
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
注意到附加行了吗?是的,这就是所有人。
编辑 2:根据我在第一次编辑中得到的结果,在 post 的底部,问题出在这一行或以下的某处:imageEncodedSigneAgent = Base64.encodeToString(byteSigneAgent,Base64.NO_WRAP);
"
/编辑。
我尝试在 MIME 消息中写入位图,作为 PNG 格式的 Base64 字符串。遗憾的是,该消息被认为是空的(windows 查看者无法阅读它,说大小是 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");
这确实在我的 MIMI 消息中写入了 base64 行,但它无法读取并且可能有点短。我认为它可能是 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没有更好的结果。我读了几本 post,链接的那个最接近我想做的,遗憾的是他的问题是 'equalTo'
的使用不当编辑:所以我尝试做 Bitmap -> bytes[] -> 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();
编辑 3:用于文档目的的 MIME 结果!
Content-Type: image/png
内容配置:表单数据;名称="body";文件名=“20150601.190623_00008_SIGN.PNG” 内容传输编码:base64 iVBORw0KGgoAAAANSUhEUgAAAOYAAABuCAIAAAC86/hZAAAA
除这部分外,一切都是正确的:
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
注意到附加行了吗?是的,这就是所有人。