Изменения в решении будут включены в предстоящий выпуск 5.0.Пожалуйста, проверьте комментарий от команды nativescript-imagepicker: https://github.com/NativeScript/nativescript-imagepicker/issues/217
Спасибо за ваше время.
Размер выбранного изображения отличается от исходного изображения, какполучить исходный размер файла?
На какой платформе (ах) возникает ваша проблема?
- эмулятор IOS 11.4 на iphone 8 Plus
- реальное устройство IOS 11.4 на IPad air
Укажите следующие номера версий, с которыми возникает ваша проблема:
Плагин (ы):"devDependencies": {
- "babel-traverse": "6.26.0",
- "babel-types": "6.26.0",
- "Вавилон": "6.18.0",
- "Ленивый": "1.0.11",
- "nativescript-dev-typcript": "0.7.2",
- "машинопись": "~ 2.7.2"
}
Имеется ли какой-либо код?Здесь я использую @ код NevinDry :
исходное изображение составляет 2 МБ, и оно стало 20 МБ после 'imageSource.saveToFile (path1, "jpeg");'
pickFile() {
let context = imagepickerModule.create({
mediaType: 1,//image only
mode: "single"
});
context
.authorize()
.then(function () {
return context.present();
})
.then(selection => {
selection.forEach(selected => {
let file;
fromAsset(selected).then((imageSource) => {
const folder = knownFolders.documents().path;
const fileName = "test.jpg";
const path1 = path.join(folder, fileName);
const saved = imageSource.saveToFile(path1, "jpeg");
console.log("saved:" + saved);
if (saved) {
console.log("Image saved successfully!");
file = File.fromPath(path1);
console.log("path1:" + path1);
this._checkFileSize(path1);
}
})
});
})
.catch(function (e) {
console.log(e);
});
}
private _checkFileSize(fileUri: string): boolean {
if (isIOS) {
var defManager = NSFileManager.defaultManager;
console.debug("the file path:" + fileUri);
var fileAttributes = defManager.attributesOfItemAtPathError(fileUri);
console.debug(defManager);
var fileSizeNumber = fileAttributes.objectForKey(NSFileSize);
console.debug(fileSizeNumber);
var fileSizeNumberB = fileSizeNumber / 1000000.0;
console.debug("file size in Megabytes");
console.debug(fileSizeNumberB);
return true;
}
}
Я также попробовал следующее решение: изображение размером 2 МБ превращается в 6 МБ.Лучше, но не правильно.
Еще одна вещь может быть связана, 'imageSource.saveToFile (filePath, fileType);'исходный тип файла - jpg, поэтому я сохраняю fileType здесь как jpg.Если используется PNG, размер больше.
pickfile2(){
let context = imagepickerModule.create({
mediaType: 1,//image only
mode: "single"
});
context
.authorize()
.then(function () {
return context.present();
})
.then(selection => {
selection.forEach(selected => {
const ios = selected.ios;
if (ios && ios.mediaType === PHAssetMediaType.Image) {
const opt = PHImageRequestOptions.new();
opt.version = PHImageRequestOptionsVersion.Current;
PHImageManager.defaultManager().requestImageDataForAssetOptionsResultHandler(
ios, opt, (imageData: NSData, dataUTI: string, orientation: UIImageOrientation, info: NSDictionary<any, any>) => {
console.debug(info.objectForKey("PHImageFileURLKey").toString());
let srcfilePath = info.objectForKey("PHImageFileURLKey").toString();
let fileName = this.extractImageName(srcfilePath);
let fileType: "png" | "jpeg" | "jpg" = this.extractImageType(fileName);
console.log("fileName:" + fileName);
console.log("srcfilePath:" + srcfilePath);
//get image instance from data; it doesn't work via 'fromPath'
let imageSource: ImageSource = <ImageSource>fromData(imageData);
let filePath = path.join(this.filePickerPath, fileName);
console.log("filePath:" + filePath);
let saved = imageSource.saveToFile(filePath, fileType);
console.log("saved:" + saved);
if (saved) {
this._checkFileSize(filePath);
}
});
}
});
})
.catch(function (e) {
console.log(e);
});
}
Код игровой площадки здесь
Страница перестала работать после добавления пакета npm 'tns-platform-декларации'от него.Поэтому, пожалуйста, загрузите его, если хотите запустить.Затем
- удалите версию папки nativescript-imagepicker@6.0.4
- переименуйте package1.json в package.json
- В файле reference.d.ts добавьтедобавление '/' перед '//', чтобы сделать его как '///' в двух строках.
- npm install.Это демо должно работать в вашей среде.
В любом случае, у кого-нибудь есть идеи?Спасибо.