Articles of base64

使用Base64将Android Image上载/下载到JSON会导致内存不足错误

我目前编码和解码图像到Base64。 我通过使用流将图像编码为字符串来克服OOM的初始问题。 我现在的问题是,我无法理解如何通过Gson将多个分辨率图像(5620 x 3747 – 4.92MB或3264 x 1836 – 1.35MB)的多个Base64编码字符串添加到JSON对象。 目前Gson仅使用来自5312 x 2988 – 4.95 MB图像的2个Base64字符串抛出OOMexception。 我知道android可能只能为每个应用程序节省16 / 20Mb,因此这种转换必须超过限制。 如何将流中的Base64字符串写入JSON对象,该对象将包含发布到我的服务器所需的特定值? 是否更容易更改我的服务器以接受多部件请求而不是基于JSON的POJO与多个Base64字符串? 我目前使用的是Volley,并没有官方的多部分请求以及IO流。 如果是压缩问题,在编码到Base64字符串之前,我应该对图像应用多少压缩? 理想情况下,我希望失去任何质量但具有最佳压缩级别。 更多信息 我正在上传多个不同的分辨率图像,因为它是兼容性的测试。 例如,我发送的所有图像都是在低分辨率和极高分辨率的设备上拍摄的,因为我的应用依赖于这些图像的function。 我试图certificate我的应用程序可以处理任何图像(在某种程度上,主要是在移动设备上捕获的图像)。 我知道有些图像可能太大,以至于将它们加载到内存中会导致exception。 这是我稍后会尝试处理的。 在某些情况下,将上传的图像可以从1到200。 我正在努力寻找能够很好地扩展的最佳解决方案。

如何将Bitmap转换为Base64字符串

我正在开发一个Android应用程序,它将Base64字符串的图像上传到Web服务器。 因此,我使用以下代码将位图转换为Base64字符串。 public String getEncoded64ImageStringFromBitmap(Bitmap bitmap) { ByteArrayOutputStream stream = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream); byte[] byteFormat = stream.toByteArray(); String imgString = Base64.encodeToString(byteFormat, Base64.NO_WRAP); return imgString; } 例如,我需要转换此图像 。 在转换之后,我没有像我预期的那样获得Base64字符串。 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 它应该是真正的Base64字符串(我用这个网站转换) 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 我的转换有什么问题? 谢谢 !

php / java for android之间的数据编码/解码

我必须解码从php服务器接收的base64编码数据。 服务器使用’base64_encode’对数据进行编码。 在我的Android应用程序中,我使用android.utils.Base64类来进行解码。 原始加密数据=“†+Ü] M(‡=ñö” php中的Base64编码数据给出…… – “hisP3F1NBCgIAocQCD3x9g ==” android中的Base64编码数据给出 – “4oCgKw / DnF1NBCgIAuKAoRAIPcOxw7Y =” 如您所见,java编码的字符串比php编码的长。 请提出宝贵的建议。 我需要找出他们的默认编码格式。 如何从两者中获取相同的编码字符串。? java / android代码: String encrypted = “†+ Ü]M(‡ =ñö”; byte[] encoded = Base64.encode(encrypted.getBytes(), Base64.DEFAULT); String str = new String(encoded); //str = “4oCgKw/DnF1NBCgIAuKAoRAIPcOxw7Y=”

如何将位图转换为PNG,然后转换为Android中的base64?

正如标题所暗示的那样,我试图让我的Android应用程序的用户从他的设备中选择一个图像(完成),然后我想缩小图像(完成),压缩/转换图像到png并发送它API作为base64字符串。 所以我目前调整图像大小如下: options.inSampleSize = calculateInSampleSize(options, MAX_IMAGE_DIMENSION, MAX_IMAGE_DIMENSION); options.inJustDecodeBounds = false; Bitmap bitmap = BitmapFactory.decodeFile(path, options); 然后我有一个位图,我想将其转换为PNG,然后从那里转换为base64。 我find了一些示例代码转换为PNG并将其存储在设备上。 try { FileOutputStream out = new FileOutputStream(filename); bmp.compress(Bitmap.CompressFormat.PNG, 90, out); out.close(); } catch (Exception e) { e.printStackTrace(); } 问题是我不想保存图像。 我只想将其作为PNG保存在内存中,然后将其进一步转换为base64字符串。 有没有人知道如何将图像转换为png并将其存储在variables中,甚至更好,立即将其转换为base64? 欢迎所有提示!

用于将base64字符串转换为位图的Android代码

您好stackoverflow团队我有一个问题,将base64字符串转换为android中的位图。 我正在使用相机来获取图像,我将图像转换为base64字符串以发布到服务器。 我想在imageview中显示该图像,以便在从相机中获取图像后如何在ImageView中显示图像。 请帮我解决问题。

Phonegap插件:如何在Android中将Base64字符串转换为PNG图像

Android不允许基于Phonegap的应用程序等本机应用程序编写二进制文件。 常见的应用程序是将Base64字符串转换为图像。 那么,你怎么解决这个问题呢?

拍照并转换为Base64

我用下面的代码用相机拍照。 而不是保存我想将其编码为Base64 ,然后将其作为输入传递给另一个API。 我看不到方法,如何修改代码在Base64而不是常规文件中拍照。 public class CameraDemoActivity extends Activity { int TAKE_PHOTO_CODE = 0; public static int count = 0; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final String dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + “/picFolder/”; File newdir = new File(dir); newdir.mkdirs(); Button capture = (Button) findViewById(R.id.btnCapture); capture.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { count++; […]

在Android应用程序中使用commonc编解码器的NoSuchMethodError

我按照这里的说明在eclipse中为我的Android应用程序添加了来自apache.org(commons-codec-1.4.jar)的公共编解码器。 代码中没有错误。 但是当我运行应用程序并调用使用编解码器的函数时,应用程序停止并需要关闭。 在logCat中说: Android运行时:java.lang.NoSuchMethodError:org.apache.commons.codec.binary.Base64.encodeBase64String 代码行是:String tmpStr = Base64.encodeBase64String(msg); // msg是一个字节[] 该应用程序适用于最低SDK版本= 7(Android 2.1),因此我无法使用Android Base64 不知道怎样才能解决问题?

Java:使用java.util.Base64和android.util.Base64解码base64字符串时的结果不同

我正在研究客户端/服务器系统,我正在尝试进行一些基本的加密。 当我连接到服务器时,我将一个公钥作为转义字符串发送到套接字。 我已经validation字符串在两端,换行符和所有字符串都是相同的 。 在客户端(Android)上,我能够使用公钥/私钥成功加密和解密密钥(用于测试目的)。 但是,当尝试将公钥从String解码为byte []时,服务器立即失败,其中: java.lang.IllegalArgumentException: Illegal base64 character a 这似乎是荒谬的,因为’a’绝对是一个base64字符,如果我理解正确的话。 客户端和服务器使用共享库来处理所有加密,因此代码几乎相同。 唯一的区别是编码/解码base64字符串,因为java.util.Base64在Android上不可用。 共享课程 public abstract class EasyCrypt { … public PublicKey loadPublicKey(String key64) throws GeneralSecurityException { byte[] data = decode(key64); //Calls abstract methods, shown below X509EncodedKeySpec spec = new X509EncodedKeySpec(data); KeyFactory fact = KeyFactory.getInstance(“RSA”); return fact.generatePublic(spec); } … } 客户端(Android)方法 import android.util.Base64; […]

有效数字String上的NumberFormatException

我已经看到了其他一些问题,但错误与字符串中的前导0有关。 不幸的是,这不是我的情况。 我从base64格式的外部源接收加密数据,然后解码它(使用包含的Base64库,因为android sdk版本是7),解密消息,毕竟我有一个数字格式的简单字符串。 当我尝试将其Integer为Long或Integer我收到此错误: java.lang.NumberFormatException: Invalid long: “2551122” at java.lang.Long.invalidLong(Long.java:125) at java.lang.Long.parse(Long.java:362) at java.lang.Long.parseLong(Long.java:353) at java.lang.Long.parseLong(Long.java:319) at com.nzn.lol.LoginActivity$LoginTask.doInBackground(LoginActivity.java:98) at com.nzn.lol.LoginActivity$LoginTask.doInBackground(LoginActivity.java:1) at android.os.AsyncTask$2.call(AsyncTask.java:264) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) at java.util.concurrent.FutureTask.run(FutureTask.java:137) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 要检查输入我使用的打印,它实际上是字符串“2551122”。 当我尝试检查相等性时,它也是不正确的 “2551122”.equals(numberAsString) // Gives me false 我认为这是一个编码问题,并试图采用解码的字节并在几个编码中创建字符串,也试图用相同的几个编码解码base64字符串中的字节,但仍然不知道是什么导致了这个错误。 请任何帮助表示赞赏 UPDATE 这是用于解密字符串的代码(Encryptor类): private static byte[] decrypt(byte[] raw, byte[] encrypted) throws Exception { SecretKeySpec skeySpec = […]