Comments (7)
Here's the resize function I've been using now for a while:
js
resizeImage: function ( file ) {
var resized = {};
var deferred = $q.defer();
var img = document.createElement("img");
var reader = new FileReader();
reader.onload = function(e) {
// resize the picture
img.src = e.target.result;
var canvas = document.createElement("canvas");
var MAX_WIDTH = 150;
var MAX_HEIGHT = 150;
var width = img.width;
var height = img.height;
if (width > height) {
if (width > MAX_WIDTH) {
height *= MAX_WIDTH / width;
width = MAX_WIDTH;
}
} else {
if (height > MAX_HEIGHT) {
width *= MAX_HEIGHT / height;
height = MAX_HEIGHT;
}
}
canvas.width = width;
canvas.height = height;
var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0, width, height);
resized.base64 = canvas.toDataURL("image/png");
deferred.resolve(resized);
};
reader.readAsDataURL(file, "UTF-8");
return deferred.promise;
}
html
<input ... parser="resizeImage" base-sixty-four-input>
Note that you need the $q
service. Here is a fiddle: http://fiddle.jshell.net/51bsbzL0/93/
from angular-base64-upload.
+1
from angular-base64-upload.
@bersling You may need to use $scope.$apply()
if your using img.onload = function ()
. Anyway I'm working on this. Will give you update soon.
from angular-base64-upload.
@AlexVKO Please try this code:
$scope.resizeImage = function (file, base64) {
var deferred = $q.defer();
// We create an image to receive the Data URI
var img = document.createElement('img');
// When the event "onload" is triggered we can resize the image.
img.onload = function()
{
// We create a canvas and get its context.
var canvas = document.createElement('canvas');
var ctx = canvas.getContext('2d');
// We set the dimensions at the wanted size.
canvas.width = 100;
canvas.height = 100;
// We resize the image with the canvas method drawImage();
ctx.drawImage(this, 0, 0, 100, 100);
var dataURI = canvas.toDataURL();
base64.resizedDataURI = dataURI;
deferred.resolve(base64);
$scope.$apply();
/////////////////////////////////////////
// Use and treat your Data URI here !! //
/////////////////////////////////////////
};
img.src = 'data:'+base64.filetype+';base64,'+base64.base64;
return deferred.promise;
};
<input type="file" ng-model="file" name="file" base-sixty-four-input accept="image/*" parser="resizeImage">
The resized image is the base64.resizedDataURI
.
from angular-base64-upload.
onload="postLoadFunc" parser="resizeImage"
, resizeImage
will execute before postLoadFunc
, but postLoadFunc
will execute before resizeImage
return. here is the log: before resize, begin upload, after resize
. What i want is before resize, after resize, begin upload
. hope you can catch what i said.
from angular-base64-upload.
I'm trying this but I still see the unresized base64. Do you have any plucker of your example?
from angular-base64-upload.
Thank you very much sir. Everything working now.
from angular-base64-upload.
Related Issues (20)
- Using this library in ionic v2 framework running angular 2 HOT 1
- After selected a file input field shows "None selected" HOT 11
- multiple upload error HOT 4
- Re-Run validation when model value changes or allow Capability to user to run validation
- How to decode and revert file back for download
- File is valid when exceeding maxsize with do-not-parse-if-oversize HOT 1
- filetype blank on model with .docx, .doc
- Handler is not an function HOT 1
- How to preview the file HOT 1
- tableau files not supported (*.twb, *.twbx)
- Regarding License
- support ng2 or later ? HOT 1
- New Maintainer
- bro gak gini dong HOT 1
- Append files when selecting files one at a time in case of multiple upload
- Uncaught TypeError: b(...) is not a function HOT 1
- Error handling fails when csv file uploaded.
- Doesn't work inside ng-repeat
- Rotate image before parsing using exif data HOT 1
- Bower can't find version 0.1.20 HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from angular-base64-upload.