Comment créer une application photo avec Ionic 2

Ce que vous allez créer

En tant que développeur prudent, vous pouvez vous méfier de la création d'applications hybrides qui reposent sur les API natives d'Android. Il y a quelques années, j'étais moi aussi avec Android, qui avait tant d'incertitudes liées à sa version et à son appareil. Aujourd'hui, cependant, nous pouvons faire confiance aux frameworks de développement d'applications hybrides pour gérer la plupart de ces bizarreries de manière transparente. Ionic 2, qui repose sur Apache Cordova, est l’un de ces cadres..

Ionic 2 contient des enveloppes pour plusieurs plug-ins Cordova populaires qui vous permettent d'utiliser facilement les ressources natives d'Android, telles que les appareils photo, les capteurs matériels et le système de fichiers. Dans ce tutoriel, je vais vous montrer comment utiliser ces wrappers avec des composants d'interface utilisateur Ionic 2 pour créer une application de caméra simple..

Conditions préalables

Pour suivre, vous aurez besoin de:

  • la dernière version du SDK Android
  • Node.js v6.7.0 ou supérieur
  • un appareil ou un émulateur fonctionnant sous Android 4.4 ou supérieur
  • une compréhension de base de TypeScript et Angular 2

1. Installez Cordova et Ionic

Les solutions Ionic et Cordova sont disponibles en tant que modules NPM. La manière la plus simple de les installer consiste à utiliser le logiciel. npm commander. Voici comment vous pouvez les installer globalement:

npm installer -g cordova ionic

Une fois l'installation terminée, tapez ce qui suit pour vous assurer que l'interface de ligne de commande Ionic, ou CLI, est configurée correctement..

infos ioniques | grep "Version"

Le résultat de la commande ci-dessus devrait ressembler à ceci:

Version Ionic CLI: 2.2.1 Version Ionic App Lib: 2.2.0 Version Nœud: v6.7.0

2. Créer un nouveau projet

La CLI d’Ionic facilite la création de nouveaux projets Ionic 2 avec tous les fichiers de configuration et le code standard requis. Il propose également plusieurs modèles de départ parmi lesquels choisir. Pour le moment, créons simplement un projet en utilisant le blanc modèle de départ.

début ionique MyCameraApp vierge --v2 --id com.tutsplus.mycameraapp

À ce stade, vous aurez un nouveau répertoire appelé MyCameraApp. Pour le reste de ce tutoriel, nous allons travailler dans ce répertoire.

cd MyCameraApp

3. Configurez le projet

Par défaut, un projet Ionic 2 n'est pas configuré pour cibler une plate-forme mobile. Voici comment vous ajoutez le support pour Android:

plate-forme ionique ajouter android

Vous devez également pointer manuellement Ionic 2 vers l'emplacement où vous avez installé le SDK Android. Si vous utilisez Mac ou Linux, utilisez la commande exportation commande de le faire.

export ANDROID_HOME = ~ / Android / Sdk /

4. Installer des plugins ioniques

Notre application de caméra a besoin d'accéder à la caméra et au système de fichiers du périphérique, qui sont tous deux des ressources natives. Si vous connaissez Cordova, sachez que les applications hybrides interagissent généralement avec ces ressources via des plug-ins. Bien que vous puissiez utiliser un plugin Cordova directement dans un projet Ionic 2, il est beaucoup plus facile d’utiliser son wrapper Ionic Native à la place..

Pour accéder à la caméra, nous allons utiliser le cordova-plugin-camera-preview brancher. Cela nous permet non seulement de prendre des photos, mais également de leur appliquer plusieurs filtres d'image. Voici comment vous pouvez l'ajouter à votre projet:

plugin ionique ajouter cordova-plugin-camera-preview

Nous devrons bien sûr enregistrer les photos que nous prenons sur des supports de stockage externes, tels que des cartes SD. Pour ce faire, nous allons utiliser le cordova-plugin-file brancher.

plugin ionique ajouter cordova-plugin-file

Enfin, pour prendre en charge les appareils Android dotés de l’API de niveau 23 ou supérieur, nous avons besoin de la cordova.plugins.diagnostic brancher.

plugin ionique ajouter cordova.plugins.diagnostic

5. Définir la mise en page

L'interface utilisateur de notre application sera composée des composants suivants:

  • une fenêtre d'aperçu de la caméra
  • un bouton d'action flottant pour prendre des photos
  • un bouton d'action flottant pour appliquer des filtres d'image

Nous allons créer la fenêtre de prévisualisation de la caméra par programme dans une étape ultérieure. Pour l'instant, créons une mise en page HTML contenant seulement deux boutons d'action flottants.

Comme notre application vierge contient déjà une page, nous l'utilisons au lieu d'en créer une nouvelle. Pour modifier sa mise en page, ouvrez src / pages / home / home.html. Vider son contenu et ajouter un nouveau tag à elle.

 

Pour créer un bouton d'action flottant, vous pouvez créer un bouton HTML ordinaire et ajouter le ion-fab attribuer à elle. De plus, en enveloppant le

Comme vous pouvez le voir dans le code ci-dessus, nous avons ajouté Cliquez sur gestionnaires d'événements à la fois les boutons. Nous les définirons plus tard.

6. Acquérir des autorisations

Sur les appareils exécutant l'API Android de niveau 23 ou supérieur, vous devez explicitement demander à l'utilisateur les autorisations nécessaires pour accéder à la caméra et au système de fichiers pendant l'exécution. Pour ce faire dans votre application hybride, vous pouvez utiliser les méthodes disponibles dans Diagnostique Enveloppeur natif ionique.

Commencez par ouvrir src / pages / home / home.ts et importer Diagnostique.

importer Diagnostic de 'ionic-native';

À l'intérieur du constructeur du Page d'accueil classe, ajouter un appel à un nouveau checkPermissions () méthode. De plus, ajoutez un ToastController objet à la classe utilisant l'injection de dépendance. Nous allons l'utiliser pour afficher les toasts Ionic 2, qui sont presque identiques aux barres de snack natives d'Android..

Après avoir apporté les modifications ci-dessus, votre code devrait ressembler à ceci:

constructeur (public navCtrl: NavController, public toastCtrl: ToastController) this.checkPermissions ();  checkPermissions () // Plus de code va ici

À l'intérieur de checkPermissions () méthode, utilisez le isCameraAuthorized () méthode du Diagnostique classe pour vérifier si l'application dispose déjà des autorisations nécessaires pour accéder à la fois à la caméra et au système de fichiers. Parce que la méthode retourne un Promettre objet, vous devez utiliser un rappel pour gérer son résultat.

Si l'application ne dispose pas des autorisations requises, vous pouvez utiliser le requestCameraAuthorization () méthode pour les demander.

Si l'utilisateur accorde les autorisations, ou si notre application les possède déjà, nous pouvons initialiser l'aperçu de la caméra à l'intérieur. initializePreview (), une méthode que nous allons créer à l'étape suivante. Sinon, affichons simplement un toast contenant un message d'erreur à l'aide de la touche créer() et présent() méthodes de la ToastController classe.

En conséquence, ajoutez le code suivant dans le répertoire checkPermissions () méthode:

Diagnostic.isCameraAuthorized (). Then ((autorisé) => if (autorisé) this.initializePreview (); else Diagnostic.requestCameraAuthorization (). Then ((status) => si (status == Diagnostic.permissionStatus.GRANTED) ) this.initializePreview (); else // Autorisations non accordées // Par conséquent, créez et présentez un toast this.toastCtrl.create (message: "Impossible d'accéder à la caméra", position: "en bas", durée: 5000) .present ();););

Voici à quoi ressemble la boîte de dialogue d'autorisation de l'appareil photo sur un appareil fonctionnant sous Android Marshmallow:

7. Créer un aperçu de la caméra

le CameraPreview L'emballage Ionic Native vous permet d'afficher un aperçu de la caméra en direct dans votre application hybride. Cependant, comme l'aperçu utilise un fragment Android au lieu d'un élément HTML, son ajout à notre page est légèrement compliqué..

Avant de commencer, assurez-vous d’importer les deux CameraPreview et CameraPreviewRect.

importer CameraPreview, CameraPreviewRect de 'ionic-native';

Utilisant un CameraPreviewRect objet, vous pouvez spécifier la position et la taille de l'aperçu de la caméra. Pour l'instant, faisons-le remplir l'écran de l'appareil complètement.

initializePreview () // Rendre la largeur et la hauteur de l'aperçu égales // à la largeur et à la hauteur de la fenêtre de l'application, laissez previewRect: CameraPreviewRect = x: 0, y: 0, width: window.innerWidth, height: window. innerHeight; // Plus de code va ici

À ce stade, nous avons tout ce dont nous avons besoin pour lancer l'aperçu de la caméra. Par conséquent, appelez le startCamera () méthode du CameraPreview classe et passe le CameraPreviewRect objecter à cela. Bien entendu, vous devez également spécifier la caméra que vous souhaitez utiliser. Dans ce tutoriel, nous n'utiliserons que la caméra arrière.

// Démarrer l'aperçu CameraPreview.startCamera (previewRect, 'rear', false, false, true, 1);

L'aperçu de la caméra sera placé sous notre page HTML et ne sera visible que si l'arrière-plan de notre application est transparent. La façon la plus simple de le faire est d’ajouter une règle CSS dans le src / app / app.scss fichier.

ion-app, ion-content background-color: transparent! important; 

8. prendre des photos

En définissant la mise en page de notre page, nous avons déjà ajouté un Cliquez sur sur le bouton sur lequel l'utilisateur appuiera pour prendre des photos. Définissons maintenant le gestionnaire.

Prendre une photo avec le CameraPreview Le wrapper natif ionique est aussi simple que d’appeler le takePicture () méthode et en spécifiant la résolution souhaitée de l’image. Pour l'instant, utilisons 320 x 320 comme les dimensions maximales de notre image.

takePicture () CameraPreview.takePicture (maxWidth: 320, maxHeight: 320); 

Il est à noter que la spécification de résolutions élevées peut entraîner des erreurs de mémoire insuffisante..

9. Appliquer des effets d'image

le CameraPreview wrapper vous permet d’appliquer facilement en temps réel plusieurs effets d’image courants, également appelés filtres d’image, à vos images. Nous avons déjà ajouté un Cliquez sur sur le bouton sur lequel l'utilisateur appuiera pour appliquer les effets d'image. Par conséquent, tout ce que nous avons à faire maintenant est de le définir.

Pour que notre code soit simple, chaque fois que l'utilisateur appuie sur le bouton, sélectionnons un effet aléatoire dans un tableau d'effets et appliquez-le. Vous pouvez utiliser le JavaScript Math.random () fonction pour choisir un effet aléatoire, et le setColorEffect () méthode du CameraPreview classe à l'appliquer.

changeEffect () // Crée un tableau avec 5 effets et laisse les effets: any = ['none', 'negative', 'mono', 'aqua', 'sépia']; let randomEffect: string = effects [Math.floor (Math.random () * effects.length)]; CameraPreview.setColorEffect (randomEffect); 

Vous pouvez exécuter l'application maintenant et appuyer plusieurs fois sur FAB pour voir les différents effets d'image appliqués à la fenêtre d'aperçu de l'appareil photo..

10. Déplacer les images vers un stockage externe

Notre application place toutes les images qu'elle prend dans son répertoire de stockage d'application, qui est un répertoire de données privé. Si vous préférez stocker ces images sur un support de stockage externe et les mettre ainsi à la disposition d'applications de galerie de photos tierces, vous devez les déplacer manuellement. Pour ce faire, vous pouvez utiliser le Fichier Enveloppeur natif ionique.

Comme toujours, importez le wrapper avant de l’utiliser. De plus, déclarer Cordova en tant que variable globale initialisée en externe. Il offre des constantes qui vous permettent de vous référer facilement à tous les répertoires fréquemment utilisés du système de fichiers Android..

importer fichier de 'ionic-native'; déclarer var cordova: any; // variable globale pour les chemins

Nous devrions déplacer les images vers le répertoire de stockage externe dès qu'elles sont prises. Par conséquent, abonnez-vous à la setOnPictureTakenHandler () méthode du CameraPreview classe. La méthode retourne un tableau contenant les chemins absolus de l'image et sa vignette. Pour l'instant, nous allons déplacer l'image uniquement.

En conséquence, ajoutez le code suivant vers la fin de la initializePreview () méthode:

CameraPreview.setOnPictureTakenHandler (). Subscribe ((result)) => this.moveFileToExternalStorage (result [0]); // Déplacer l'image uniquement);

À l'intérieur de moveFileToExternalStorage () méthode, on peut utiliser le moveFile () méthode du Fichier classe pour déplacer réellement l'image. le moveFile () méthode attend des répertoires et noms de fichiers source et de destination comme arguments.

Pour déterminer le chemin du répertoire de stockage externe de votre application, utilisez la commande cordova.file.externalApplicationStorageDirectory constant. De même, pour déterminer le chemin du répertoire de stockage privé de votre application, utilisez la commande cordova.file.applicationStorageDirectory constant.

De plus, pour extraire le nom de fichier de l’image de son chemin absolu, vous pouvez simplement utiliser le code JavaScript. Divisé() et pop() méthodes. Je vous suggère également d'afficher un toast une fois l'opération de déplacement terminée..

moveFileToExternalStorage (fileName: string) // Déterminez les chemins d'accès, laissez externalStoragePath: string = cordova.file.externalApplicationStorageDirectory; let currentPath: string = cordova.file.applicationStorageDirectory + "fichiers /"; // Extraire le nom du fichier nomFichier = nomFichier.split ("/"). Pop (); // Déplace le fichier File.moveFile (currentPath, fileName, externalStoragePath, fileName) .then (_ => this.toastCtrl.create (message: "Photo enregistrée", position: "bottom", durée: 2000) .présent(); ); 

Notre application de caméra est maintenant complète. Vous pouvez afficher ses images à l'aide de n'importe quelle application de galerie photo installée sur votre appareil..

Conclusion

Dans ce didacticiel, vous avez appris à utiliser Ionic 2 et les enveloppes de plug-in disponibles dans Ionic Native pour créer une application hybride capable de prendre des photos, de leur appliquer des effets d'image et de les stocker sur un support de stockage externe. Bien que nous nous concentrions aujourd'hui uniquement sur la plate-forme Android, vous pouvez être sûr que notre application fonctionnera, avec des modifications minimes, sur les appareils iOS également..

Pour en savoir plus sur Ionic 2, vous pouvez vous reporter à sa documentation détaillée. Notre check out notre cours Ionic 2 ici sur Envato Tuts+!