phonegap(cordova) 自己定义插件代码篇(四)----读取本地图片

时间:2023-03-08 19:28:40
phonegap(cordova) 自己定义插件代码篇(四)----读取本地图片

有时候确实知道本地图片地址,要获取到base64 

/**
* 获取本地图片,包括路径和压缩后的 base64
*/ (function (cordova) {
var define = cordova.define; define("cordova/plugin/localImage", function (require, exports, module) {
var argscheck = require('cordova/argscheck'),
exec = require('cordova/exec');
exports.getImage = function (localFileUrl, successCB, failCB) { exec(successCB, failCB, "LocalImage", "getImage", [localFileUrl]); }; });
cordova.addConstructor(function () {
if (!window.plugins) {
window.plugins = {};
}
console.log("将插件注入localImage...");
window.plugins.localImage = cordova.require("cordova/plugin/localImage");
console.log("localImage注入结果:" + typeof (window.plugins.localImage)); });
})(cordova);

android

public class LocalImagePlugin extends CordovaPlugin {
@Override
public boolean execute(String action, JSONArray args,
CallbackContext callbackContext) throws JSONException { if ("getImage".equals(action)) { String localFileUrl = args.getString(0).replace("file:///", "/");
// Log.i("our", localFileUrl);
String file = "{\"path\":\"" + localFileUrl + "\",\"data\":\""
+ bitmapToString(localFileUrl) + "\"}";
// Log.i("our", file);
callbackContext.success(file);
return true; } else {
return false;
}
} public static String bitmapToString(String filePath) { Bitmap bm = getSmallBitmap(filePath);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.JPEG, 50, baos);
byte[] b = baos.toByteArray();
return Base64.encode(b);
} // 依据路径获得图片并压缩。返回bitmap用于显示
public static Bitmap getSmallBitmap(String filePath) {
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(filePath, options); // Calculate inSampleSize
options.inSampleSize = calculateInSampleSize(options, 480, 800); // Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false; return BitmapFactory.decodeFile(filePath, options);
} // 计算图片的缩放值
public static int calculateInSampleSize(BitmapFactory.Options options,
int reqWidth, int reqHeight) {
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 1; if (height > reqHeight || width > reqWidth) {
final int heightRatio = Math.round((float) height
/ (float) reqHeight);
final int widthRatio = Math.round((float) width / (float) reqWidth);
inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
}
return inSampleSize;
}
}

iOS 

#import <UIKit/UIKit.h>
#import <Cordova/CDV.h> @interface CDVLocalImage: CDVPlugin @property (nonatomic,copy) NSString*callbackID;
//Instance Method
-(void) getImage:(CDVInvokedUrlCommand*)command ; @end

#import "CDVLocalImage.h"
#import "TencentOpenAPI/QQApiInterface.h"
#import <TencentOpenAPI/TencentOAuth.h>
@implementation CDVLocalImage
@synthesize callbackID;
-(void)getImage:(CDVInvokedUrlCommand *)command {
//url
NSString* localImageUrl = [command.arguments objectAtIndex:0]; localImageUrl =[localImageUrl stringByReplacingOccurrencesOfString:@"file://" withString:@""]; NSData *mydata=UIImageJPEGRepresentation([UIImage imageWithContentsOfFile:localImageUrl], 0.5);
NSString *pictureDataString=[mydata base64Encoding]; NSString *file =[NSString stringWithFormat:@"{\"path\":\"%@\",\"data\":\"%@\"}", localImageUrl,pictureDataString]; // NSLog(@"selected >>>>%@",file); CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:file];
[self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
}
@end