我正在编写一个应用程序,可让您绘制签名,将其转换为 PNG 并以 Base64 格式将其上传到服务器。
此图像应该可以使用 iPad 和 Android 平板电脑下载。
Android 平板电脑可以从其他平板电脑和其他 iPad 下载和显示图像,但由于某种原因,iPad 在尝试将原始图像数据转换为可用的图像格式时会卡住?
在 iPad 上抛出的异常是:
imageio: png incorrect header check
No IDATs written into file
创建PNG图像并将其转换为Base64的Android代码如下:
public static String getBase64ImageFromImageView(ImageView imageView) {
Bitmap bitmap = ((BitmapDrawable) imageView.getDrawable()).getBitmap();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] bitmapByteArray = baos.toByteArray();
return Base64.encodeToString(bitmapByteArray, Base64.NO_WRAP);
}
抛出错误的Objective-C代码是:
NSData *imageData = [NSData dataWithData:UIImagePNGRepresentation(signatureImage)];
其中 signatureImage 是包含 Base64 解码图像数据的 UIImage。
我们已经通过解码并将其保存为图像文件来验证 Base64-ed 图像是正确的(可以正常工作)
这是导致问题的“UIImagePNGRepresentation”调用,但我不知道为什么!
任何想法,所以大师?
编辑 刚刚想到这一点,当我想在 android 上使用签名文件时,我调用以下命令:
byte[] bytes = Base64.decode(base64, Base64.DEFAULT);
imageView.setImageBitmap(BitmapFactory.decodeByteArray(bytes, 0, bytes.length));
会不会是 iPad 在使用之前需要以某种方式解压缩或解码图像?