Last Updated On 11/Mar/2019 for Latest Ionic Version 4.11.0
In this post, we will discuss on how to show local images in application asset’s images folder in Image / Photo viewer having basic functionalities like Pan, Zoom, Share download image on device etc.
In this example application, we will add an image in application src folder at path “~src/assets/images/logo.jpg” then using File we will show the image using Photo-viewer plugin.
Also Read: Ionic 3 – Implement Image Viewer for Photos in the Assets folder.
Also Read: Ionic | Crop Images using Ionic 4 native plugin with Image Picker
Create new Ionic 4 application by running the following commands
$ ionic start Ionic4PhotoImageViewerDemo blank --type=angular
$ cd Ionic4PhotoImageViewerDemo
Install Cordova and Ionic Native plugins
Run following commands to install File and Photo-viewer.
$ ionic cordova plugin add cordova-plugin-file
$ npm install @ionic-native/file
$ ionic cordova plugin add com-sarriaroman-photoviewer
$ npm install @ionic-native/photo-viewer
Import native plugins in app.module.ts
After imports and adding, providers for added plugins file will look like this
import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { RouteReuseStrategy } from '@angular/router'; import { IonicModule, IonicRouteStrategy } from '@ionic/angular'; import { SplashScreen } from '@ionic-native/splash-screen/ngx'; import { StatusBar } from '@ionic-native/status-bar/ngx'; import { AppComponent } from './app.component'; import { AppRoutingModule } from './app-routing.module'; import { File } from '@ionic-native/file/ngx'; import { PhotoViewer } from '@ionic-native/photo-viewer/ngx'; @NgModule({ declarations: [AppComponent], entryComponents: [], imports: [BrowserModule, IonicModule.forRoot(), AppRoutingModule], providers: [ StatusBar, SplashScreen, { provide: RouteReuseStrategy, useClass: IonicRouteStrategy }, File, PhotoViewer ], bootstrap: [AppComponent] }) export class AppModule {}
Add button in home.page.html
<ion-header>
<ion-navbar>
<ion-title>
Photo Viewer from Asset Folder Demo
</ion-title>
</ion-navbar>
</ion-header>
<ion-content padding>
<p>View Photo From Application's Assets Folder<br>
<ion-button (click)="viewPhoto()">View Photo</ion-button>
</p>
</ion-content>
In home.page.ts we will add events
import { Component } from '@angular/core'; import { File } from '@ionic-native/file/ngx'; import { PhotoViewer } from '@ionic-native/photo-viewer/ngx'; @Component({ selector: 'app-home', templateUrl: 'home.page.html', styleUrls: ['home.page.scss'], }) export class HomePage { constructor( private photoViewer: PhotoViewer, private file: File) { } viewPhoto() { let imageName = "logo.jpg"; const ROOT_DIRECTORY = this.file.applicationStorageDirectory;//'file:///sdcard//'; const downloadFolderName = 'tempDownloadFolder'; //Create a folder in memory location this.file.createDir(ROOT_DIRECTORY, downloadFolderName, true) .then((entries) => { //Copy our asset/img/logo.jpg to folder we created this.file.copyFile(this.file.applicationDirectory + "www/assets/images/", imageName, ROOT_DIRECTORY + downloadFolderName + '//', imageName) .then((entries) => { this.photoViewer.show(ROOT_DIRECTORY + downloadFolderName + "/" + imageName, 'Do you want to Share', {share: true}); }) .catch((error) => { alert('1 error ' + JSON.stringify(error)); }); }) .catch((error) => { alert('2 error' + JSON.stringify(error)); }); } }
In method viewPhoto() we are creating a new directory at device root storage, the image (logo.jpg) to be viewed will be copied from assets folder to the folder then we will open the image from device folder “tempDownloadFolder” to view in Photo-viewer. applicationStorageDirectory will get storage path, we can’t view image from application src folder so we need to copy a file in memory first to open.
Leave a Reply