Konverter PNG Ke Data URI
Mari kita lihat isi dari file todatauri.js
. Pada dasarnya file ini merupakan pustaka sederhana yang akan mendownload image berformat .png
di internet dan kemudian mengubahnya menjadi format Data URI.
Jadi anda bisa menggunakan pustaka ini seperti halnya modul npm dengan bantuan require
.
/**
* todatauri.js
* Download image and convert it to Data URI
*
* WTFPL
* (c) 2015, Equan Pr.
*/
var fs = require('fs');
var http = require('http');
var https = require('https');
var url = require('url');
function Util() {
var defaultImage = 'https://upload.wikimedia.org/wikipedia/commons/thumb/d/d9/Node.js_logo.svg/320px-Node.js_logo.svg.png';
var imageDest = 'download.png';
var file;
return {
toDataURI: function(urlArg, cb) {
var imageURL;
urlArg ? imageURL = urlArg : imageURL = defaultImage;
if(url.parse(imageURL).protocol === 'https:') {
Util().httpsGetImage(imageURL, function(err, data){
err ? cb(err,null): cb(null, data);
}) ;
} else {
Util().httpGetImage(imageURL, function(err, data){
err ? cb(err, null): cb(null, data);
});
}
},
httpGetImage: function(url, cb) {
file = fs.createWriteStream(imageDest);
http.get(url, function(response) {
response.pipe(file);
console.log('Download node.js defaultImage from', defaultImage);
console.log('\n');
file.on('finish', function() {
file.close();
Util().imageToDataUri(imageDest, function(err, data) {
err ? cb(err, null) : cb(null,data);
});
});
})
},
httpsGetImage: function(url, cb) {
file = fs.createWriteStream(imageDest);
https.get(url, function(response) {
response.pipe(file);
console.log('Download node.js defaultImage from', defaultImage);
console.log('\n');
file.on('finish', function() {
file.close();
Util().imageToDataUri(imageDest, function(err, data) {
err ? cb(err, null) : cb(null,data);
});
});
})
},
imageToDataUri: function(imageName, cb) {
//TODO: lookup mime type here
var mime = 'image/png';
var encoding = 'base64';
var uri = 'data:' + mime + ';' + encoding + ',';
fs.readFile(imageName, function(err, buf) {
if (err) return cb(err, null);
cb(null, uri + buf.toString(encoding));
})
}
}
}
module.exports = Util();
Fungsi utama pada file todatauri.js
yaitu fungsi imageToDataUri()
dan jika dilihat isinya maka sebenarnya sangat sederhana untuk mengubah gambar png ke encoding base64
yang akan digunakan di Data URI.
buf.toString(encoding))
fs.readFile(filename[, options], callback)
merupakan fungsi untuk membaca file secara asinkron dan jika encoding tidak di berikan maka hasil pembacaan file akan mengembalikan data berupa buffer
. Sehingga untuk mengubah data buffer
ini ke base64
cukup dengan memakai metode .toString(encoding)
.