我正在编写一个应用程序,可以让您绘制签名,将其转换为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在使用之前需要以某种方式解压缩或解码图像吗?