diff --git a/apps/toolbox/package.json b/apps/toolbox/package.json
index 5854202d0..19708a5cd 100644
--- a/apps/toolbox/package.json
+++ b/apps/toolbox/package.json
@@ -8,7 +8,8 @@
},
"dependencies": {
"@nativescript/core": "file:../../packages/core",
- "nativescript-theme-core": "file:../../node_modules/nativescript-theme-core"
+ "nativescript-theme-core": "file:../../node_modules/nativescript-theme-core",
+ "@nativescript/imagepicker": "^1.0.6"
},
"devDependencies": {
"@nativescript/android": "alpha",
diff --git a/apps/toolbox/src/main-page.xml b/apps/toolbox/src/main-page.xml
index 34a1d1a22..d532edcf2 100644
--- a/apps/toolbox/src/main-page.xml
+++ b/apps/toolbox/src/main-page.xml
@@ -10,6 +10,7 @@
+
diff --git a/apps/toolbox/src/pages/image-handling.ts b/apps/toolbox/src/pages/image-handling.ts
new file mode 100644
index 000000000..9a4c65c90
--- /dev/null
+++ b/apps/toolbox/src/pages/image-handling.ts
@@ -0,0 +1,54 @@
+import { Observable, EventData, Page, ImageSource, knownFolders, path } from '@nativescript/core';
+import { create, ImagePickerMediaType } from '@nativescript/imagepicker';
+
+let page: Page;
+
+export function navigatingTo(args: EventData) {
+ page = args.object;
+ page.bindingContext = new DemoModel();
+}
+
+export class DemoModel extends Observable {
+ addingPhoto = false;
+
+ pickImage() {
+ const context = create({
+ mode: 'single',
+ mediaType: ImagePickerMediaType.Image,
+ });
+
+ context
+ .authorize()
+ .then(() => {
+ return context.present();
+ })
+ .then((selection) => {
+ const imageAsset = selection.length > 0 ? selection[0] : null;
+ if (imageAsset) {
+ this.addingPhoto = true;
+
+ ImageSource.fromAsset(imageAsset).then(
+ (savedImage) => {
+ const folder = knownFolders.documents();
+ const filePath = path.join(folder.path, `assets-${Date.now()}.jpg`);
+ console.log('filePath:', filePath);
+
+ const saved = savedImage.saveToFile(filePath, 'jpg');
+ if (saved) {
+ console.log(`file saved:`, filePath);
+ } else {
+ console.log('file not saved!');
+ }
+ this.addingPhoto = false;
+ },
+ (err) => {
+ this.addingPhoto = false;
+ }
+ );
+ }
+ })
+ .catch((e) => {
+ console.log(e);
+ });
+ }
+}
diff --git a/apps/toolbox/src/pages/image-handling.xml b/apps/toolbox/src/pages/image-handling.xml
new file mode 100644
index 000000000..0b67d295d
--- /dev/null
+++ b/apps/toolbox/src/pages/image-handling.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/core/image-asset/index.ios.ts b/packages/core/image-asset/index.ios.ts
index ef3e58b13..072be6fdb 100644
--- a/packages/core/image-asset/index.ios.ts
+++ b/packages/core/image-asset/index.ios.ts
@@ -1,5 +1,6 @@
import { ImageAssetBase, getRequestedImageSize } from './image-asset-common';
import { path as fsPath, knownFolders } from '../file-system';
+import { queueGC } from '../utils';
export * from './image-asset-common';
@@ -40,10 +41,8 @@ export class ImageAsset extends ImageAssetBase {
const requestedSize = getRequestedImageSize({ width: srcWidth, height: srcHeight }, this.options);
if (this.nativeImage) {
- const newSize = CGSizeMake(requestedSize.width, requestedSize.height);
- const resizedImage = this.scaleImage(this.nativeImage, newSize);
- callback(resizedImage, null);
-
+ callback(this.scaleImage(this.nativeImage, CGSizeMake(requestedSize.width, requestedSize.height)), null);
+ queueGC();
return;
}
@@ -53,11 +52,11 @@ export class ImageAsset extends ImageAssetBase {
PHImageManager.defaultManager().requestImageForAssetTargetSizeContentModeOptionsResultHandler(this.ios, requestedSize, PHImageContentMode.AspectFit, imageRequestOptions, (image, imageResultInfo) => {
if (image) {
- const resultImage = this.scaleImage(image, requestedSize);
- callback(resultImage, null);
+ callback(this.scaleImage(image, requestedSize), null);
} else {
callback(null, imageResultInfo.valueForKey(PHImageErrorKey));
}
+ queueGC();
});
}