gpt4 book ai didi

android - Phonegap 插件 :How to convert Base64 String to a PNG image in Android

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:52:52 27 4
gpt4 key购买 nike

Android 不允许原生应用程序(例如基于 Phonegap 的应用程序)写入二进制文件。一个常见的应用程序是将 Base64 字符串转换为图像。那么,您如何解决这个问题?

最佳答案

解决方案;此插件可转换 Base64 PNG 字符串并将图像生成到 sdCard。我们走吧!

<强>1。 Base64 解码器

获取名为 MiGBase64 的超快 Base64 编码/解码器类。从SourceForge下载.在项目的 src/文件夹中创建一个名为“util”的文件夹。将下载的类放在那里。

<强>2。 java

在项目的 src/文件夹中创建一个名为“org/apache/cordova”的文件夹。使用以下源代码在其中创建一个名为“Base64ToPNG.java”的 Java 文件。

package org.apache.cordova;

/**
* A phonegap plugin that converts a Base64 String to a PNG file.
*
* @author mcaesar
* @lincese MIT.
*/

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.cordova.api.Plugin;
import org.apache.cordova.api.PluginResult;
import org.json.JSONArray;

import android.os.Environment;
import java.io.*;
import org.json.JSONException;
import org.json.JSONObject;
import util.Base64;

public class Base64ToPNG extends Plugin {

@Override
public PluginResult execute(String action, JSONArray args, String callbackId) {

if (!action.equals("saveImage")) {
return new PluginResult(PluginResult.Status.INVALID_ACTION);
}

try {

String b64String = "";
if (b64String.startsWith("data:image")) {
b64String = args.getString(0).substring(21);
} else {
b64String = args.getString(0);
}
JSONObject params = args.getJSONObject(1);

//Optional parameter
String filename = params.has("filename")
? params.getString("filename")
: "b64Image_" + System.currentTimeMillis() + ".png";

String folder = params.has("folder")
? params.getString("folder")
: Environment.getExternalStorageDirectory() + "/Pictures";

Boolean overwrite = params.has("overwrite")
? params.getBoolean("overwrite")
: false;

return this.saveImage(b64String, filename, folder, overwrite, callbackId);

} catch (JSONException e) {

e.printStackTrace();
return new PluginResult(PluginResult.Status.JSON_EXCEPTION, e.getMessage());

} catch (InterruptedException e) {
e.printStackTrace();
return new PluginResult(PluginResult.Status.ERROR, e.getMessage());
}

}

private PluginResult saveImage(String b64String, String fileName, String dirName, Boolean overwrite, String callbackId) throws InterruptedException, JSONException {

try {

//Directory and File
File dir = new File(dirName);
if (!dir.exists()) {
dir.mkdirs();
}
File file = new File(dirName, fileName);

//Avoid overwriting a file
if (!overwrite && file.exists()) {
return new PluginResult(PluginResult.Status.OK, "File already exists!");
}

//Decode Base64 back to Binary format
byte[] decodedBytes = Base64.decode(b64String.getBytes());

//Save Binary file to phone
file.createNewFile();
FileOutputStream fOut = new FileOutputStream(file);
fOut.write(decodedBytes);
fOut.close();


return new PluginResult(PluginResult.Status.OK, "Saved successfully!");

} catch (FileNotFoundException e) {
return new PluginResult(PluginResult.Status.ERROR, "File not Found!");
} catch (IOException e) {
return new PluginResult(PluginResult.Status.ERROR, e.getMessage());
}

}
}

<强>3。 Javascript

将此 JavaScript 作为 Base64ToPNG.js 写入项目的 www 文件夹。不要忘记在您的 html 文件中包含对它的引用。

/**Works on all versions prior and including Cordova 1.6.1 
* by mcaesar
* MIT license
*
*/

(function() {
/* This increases plugin compatibility */
var cordovaRef = window.PhoneGap || window.Cordova || window.cordova; // old to new fallbacks

/**
* The Java to JavaScript Gateway 'magic' class
*/
function Base64ToPNG() { }

/**
* Save the base64 String as a PNG file to the user's Photo Library
*/
Base64ToPNG.prototype.saveImage = function(b64String, params, win, fail) {
cordovaRef.exec(win, fail, "Base64ToPNG", "saveImage", [b64String, params]);
};

cordovaRef.addConstructor(function() {
if (!window.plugins) {
window.plugins = {};
}
if (!window.plugins.base64ToPNG) {
window.plugins.base64ToPNG = new Base64ToPNG();
}
});

})();

<强>4。 plugins.xml 文件

将以下内容添加到 res/xml/plugins.xml 文件中

<plugin name="Base64ToPNG" value="org.apache.cordova.Base64ToPNG"/>

<强>5。最后,HTML示例和参数

<button onclick="test();">No optional params required, Cowboy.</button> </br>
<button onclick="test2();">Make PNG with some parameters</button>

<script src="Base64ToPNG.js" type="text/javascript"></script>

<script type="text/javascript">

//May have a mime-type definition or not
var myBase64 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="//a red dot


function test(){

//Illustrates how to use plugin with no optional parameters. Just the base64 Image.
window.plugins.base64ToPNG.saveImage(myBase64, {},
function(result) {
alert(result);
}, function(error) {
alert(error);
});
}

//No mimetype definition example
var myOtherBase64 = "iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="

function test2(){

//Shows how to use optional parameters
window.plugins.base64ToPNG.saveImage(myBase64, {filename:"dot.png", overwrite: true},
function(result) {
alert(result);
}, function(error) {
alert(error);
});

}
</script>

参数

  1. filename:要生成的文件的名称。默认情况下与 url 中的相同。
  2. 文件夹:生成文件的目录名称。默认“sdcard/图片”
  3. 覆盖:如果文件已经存在,则替换它。默认为假。

    我希望这能回答一些令人烦恼的问题。编码愉快!

关于android - Phonegap 插件 :How to convert Base64 String to a PNG image in Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11388018/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com