You can use this to get base64 image
async function getBase64ImageFromUrl(imageUrl) {
var res = await fetch(imageUrl);
var blob = await res.blob();
return new Promise((resolve, reject) => {
var reader = new FileReader();
reader.addEventListener("load", function () {
resolve(reader.result);
}, false);
reader.onerror = () => {
return reject(this);
};
reader.readAsDataURL(blob);
})
}
Then call it like this
getBase64ImageFromUrl('your url')
.then(result => testImage.src = result)
.catch(err => console.error(err));
Answer from Tony on Stack OverflowYou can use this to get base64 image
async function getBase64ImageFromUrl(imageUrl) {
var res = await fetch(imageUrl);
var blob = await res.blob();
return new Promise((resolve, reject) => {
var reader = new FileReader();
reader.addEventListener("load", function () {
resolve(reader.result);
}, false);
reader.onerror = () => {
return reject(this);
};
reader.readAsDataURL(blob);
})
}
Then call it like this
getBase64ImageFromUrl('your url')
.then(result => testImage.src = result)
.catch(err => console.error(err));
works like charm in pdfMake and angular
You can use this function to create generate a base64 image
toDataURL = async (url) => {
console.log("Downloading image...");
var res = await fetch(url);
var blob = await res.blob();
const result = await new Promise((resolve, reject) => {
var reader = new FileReader();
reader.addEventListener("load", function () {
resolve(reader.result);
}, false);
reader.onerror = () => {
return reject(this);
};
reader.readAsDataURL(blob);
})
return result
};
and then call it like this
imageSrcString = await this.toDataURL(imageSrc)
Should I Base64 images in Angular?
How do I use Base64 in Angular?
Can I use Base64 in Angular templates?
This worked for me:
TS FILE
base64ImageString;
async getBase64ImageFromUrl(imageUrl) {
var res = await fetch(imageUrl);
var blob = await res.blob();
return new Promise((resolve, reject) => {
var reader = new FileReader();
reader.addEventListener("load", function () {
resolve(reader.result);
}, false);
reader.onerror = () => {
return reject(this);
};
reader.readAsDataURL(blob);
})
}
ngOnInit() {
this.getBase64ImageFromUrl(this.userData.organization_logo).then(base64 => {
this.base64ImageString = base64;
})
}
HTML
<img src='{{ base64ImageString }}' class="logo" />
you can do like this, and maybe you need to resolve the origin cross if the img url is not the same origin
const image = new Image();
image.onload = function(){
const width = image.width;
const height = image.height;
const canvas = document.createElement('canvas');
canvas.width = width;
canvas.height = height;
const ctx = canvas.getContext('2d');
ctx.drawImage(image, 0, 0);
const base64 = canvas.toDataURL({format: "png"})
console.log(base64);
}
image.src = 'https://cdn.pixabay.com/photo/2015/02/24/15/41/dog-647528__340.jpg';
Answer from here https://stackoverflow.com/a/24880314/625189
I would recommend you to use https://github.com/ninjatronic/angular-base64.
After following instructions for using this library, you can simply call:
var imageData=$base64.encode(image);Don't forget to inject in your module:
.module('myApp', ['base64'])
You can use the angular custom directive to convert the image base64. directive.js
myApp.directive('imgUpload', ['$rootScope',function (rootScope) {
return {
restrict: 'A',
link: function (scope, elem, attrs) {
var canvas = document.createElement("canvas");
var extensions = 'jpeg ,jpg, png, gif';
elem.on('change', function () {
reader.readAsDataURL(elem[0].files[0]);
var filename = elem[0].files[0].name;
var extensionlist = filename.split('.');
var extension =extensionlist[extensionlist.length - 1];
if(extensions.indexOf(extension) == -1){
alert("File extension , Only 'jpeg', 'jpg', 'png', 'gif', 'bmp' are allowed.");
}else{
scope.file = elem[0].files[0];
scope.imageName = filename;
}
});
var reader = new FileReader();
reader.onload = function (e) {
scope.image = e.target.result;
scope.$apply();
}
}
}
}]);
Html:
<div class="input-group">
<input id="image" class="hidden" type="file" img-upload ng-model="imageName" name="imageName">
<img ng-src="{{image}}" height="100" width="100" ng-show="image"/>
<label for="image" class="btn btn-success btn-xs pull-center" name="upload" Value="">Upload Photo</label>
</div>
Now you need to add your code in controller which works for storing image or file in database.
» npm install image-to-base64
You need to use readAsDataUrl():
function getBase64(event) {
let me = this;
let file = event.target.files[0];
let reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function () {
//me.modelvalue = reader.result;
console.log(reader.result);
};
reader.onerror = function (error) {
console.log('Error: ', error);
};
}
This is something i have done to upload a profile picture i have also checked for size less than 512KB and then i have posted that image to my API in next function
i have used FileReader() and readAsDataURL() to convert the file to base64
/* On Change Profile image*/
onProfileChange(event:any) {
if(event.target.files && event.target.files[0]) {
if(event.target.files[0].type && event.target.files[0].type.split('/')[0] == ["image"] && event.target.files[0].size <= 512000){
this.file = event.target.files[0];
var reader = new FileReader();
reader.onload = (event:any) => {
this.Image = event.target.result;
}
reader.readAsDataURL(event.target.files[0]);
this.isBrowser = false;
} else {
this.isBrowser = true;
this._toastr.error("Max image upload size is 500KB only");
}
}
}
/*end Of On Change profile Image*/
/*Image api*/
AddImage(event: any){
let data=new FormData();
if(this.file){
data.append('image',this.file);
this._db.Post('api/users/image',data).subscribe(b=>{
if(b.IsResult){
this._toastr.success(b.ResultMsg);
this.getProfileDetail();
this.isBrowser=true;
}
});
}else{
this._toastr.error("Something went wrong");
}
}