署名を描画して 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 で編集された画像をデコードして画像ファイルとして保存することで、その画像が正しいことを確認しました (正常に動作します)。
問題を引き起こしているのは「UIImagePNGRepresentation」呼び出しですが、その理由はわかりません!
アイデアはありますか?
編集 Androidで署名ファイルを使用したいときは、次のように呼び出します。
byte[] bytes = Base64.decode(base64, Base64.DEFAULT);
imageView.setImageBitmap(BitmapFactory.decodeByteArray(bytes, 0, bytes.length));
iPad は画像を使用する前に何らかの方法で画像を解凍またはデコードする必要があるのでしょうか?