NodeJS image omzetten naar base64

Gestart doorDylan5 reacties74 weergaven

6 berichten · pagina 1 van 1

Dylan

Lid · Topicstarter

Berichten
14.025
Reputatie
1
Punten
0,01
Lid sinds
Laatst gezien
Hoi!

Ben al een tijdje bezig met dit maar het wil mij niet lukken en ik snap ook niet waarom. Ik probeer een image te downloaden en hiervan een base64 string te maken, lukt allemaal maar blijkbaar lijkt de base64 die ik genereer niet valid.

Volledige script:

Codeblok (voorbeeld.php):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90

var toDutch = function(month) {

var months = [];
months[0] = "januari";
months[1] = "februari";
months[2] = "maart";
months[3] = "april";
months[4] = "mei";
months[5] = "juni";
months[6] = "juli";
months[7] = "augustus";
months[8] = "september";
months[9] = "oktober";
months[10] = "november";
months[11] = "december";

return months[month];
}

var http = require("request");
module.exports.start = function(app, fs) {
console.log("main.js running");

/*var download = function(uri, filename, callback){
http.head(uri, function(err, res, body){
console.log(content-type:, res.headers[content-type]);
console.log(content-length:, res.headers[content-length]);
console.log(uri);
http(uri).pipe(fs.createWriteStream(filename)).on(close, callback);
});
};*/

/* Routes */
app.get("/", function(req, res, next) {
res.redirect("http://www.one2xs.com/profiel/bekijk?gebruiker=dylan");
res.end();
next();
});

app.get("/lastfm/:username", function(req, res, next) {

http("http://ws.audioscrobbler.com/2.0/?method=user.getrecenttracks&user=" + req.param("username") + "&api_key=lol&format=json&limit=1", function(err, resp, body) {
var data = JSON.parse(body);
if("" + typeof data.error != "undefined") {
res.send("Deze gebruiker bestaat niet!");
} else {

var musicData = {};
console.log(data.recenttracks.track[0]);
if("" + typeof data.recenttracks.track[0] != "undefined") {
musicData.artist = data.recenttracks.track[0].artist["#text"];
musicData.song = data.recenttracks.track[0].name;
musicData.from = (data.recenttracks.track[0].album["#text"] == "" ? "onbekend" : data.recenttracks.track[0].album["#text"]);
musicData.image = data.recenttracks.track[0].image[2]["#text"];
musicData.date = function() {
return "dit moment luister";
}
} else {
musicData.artist = data.recenttracks.track.artist["#text"];
musicData.song = data.recenttracks.track.name;
musicData.from = (data.recenttracks.track.album["#text"] === "" ? "onbekend" : data.recenttracks.track.album["#text"]);
musicData.image = data.recenttracks.track.image[2]["#text"];
musicData.date = function() {
var date = new Date(parseInt(data.recenttracks.track.date.uts)*1000);
return date.getDate() + " " + toDutch(date.getMonth())+ " om " + date.getHours() + ":" + date.getMinutes() + " luisterde";
}

}
musicData.getImage = function() {
if("" + typeof musicData.image == "string") {
var name = musicData.image.split("/")[5];
http(musicData.image, function(err, resp, body) {
console.log(musicData.image);
if("" + typeof body == "string") {
var type = musicData.image.substr(musicData.image.lastIndexOf(".") + 1);
musicData.image = "data:image/" + type + ";base64," + new Buffer(body).toString("base64");
} else {
musicData.image = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NTc3MiwgMjAxNC8wMS8xMy0xOTo0NDowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjlGQTMxODcxQTRCRjExRTRBREJBQjg2RUVFQzlBNDE3IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjlGQTMxODcyQTRCRjExRTRBREJBQjg2RUVFQzlBNDE3Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OUZBMzE4NkZBNEJGMTFFNEFEQkFCODZFRUVDOUE0MTciIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6OUZBMzE4NzBBNEJGMTFFNEFEQkFCODZFRUVDOUE0MTciLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6ovkiFAAAAD0lEQVR42mL6//8/QIABAAYGAwAriXStAAAAAElFTkSuQmCC";
}
res.render("image", musicData);
});
}
}

musicData.getImage();
}
});
})

}

Het gaat om dit stukje:

[c]
var type = musicData.image.substr(musicData.image.lastIndexOf(".") + 1);
musicData.image = "data:image/" + type + ";base64," + new Buffer(body).toString("base64");
[/c]

Van dit:
Afbeelding
krijg ik
Afbeelding
Afbeelding

Weet iemand wat ik fout doe?
0
Berichten
93.699
Reputatie
0
Punten
1,27
Lid sinds
Laatst gezien
Regel 20: [c]var http = require(request).defaults({ encoding: null });[/c]
0
Dylan

Lid · Topicstarter

Berichten
14.025
Reputatie
1
Punten
0,01
Lid sinds
Laatst gezien
Jessee schreef:
Regel 20: [c]var http = require(request).defaults({ encoding: null });[/c]
thankspompom
0
Berichten
93.699
Reputatie
0
Punten
1,27
Lid sinds
Laatst gezien
Standaard encoding is utf-8 volgens mij, dan zet hij het om naar een string. Maar dat wil je niet, je wilt de binary in een buffer hebben en dat omzetten naar base64. Dus echt de content (de image) omzetten, niet de string
0
Dylan

Lid · Topicstarter

Berichten
14.025
Reputatie
1
Punten
0,01
Lid sinds
Laatst gezien
Jessee schreef:
Standaard encoding is utf-8 volgens mij, dan zet hij het om naar een string. Maar dat wil je niet, je wilt de binary in een buffer hebben en dat omzetten naar base64. Dus echt de content (de image) omzetten, niet de string
Dus die new Buffer() op regel 76 kan wel weg? Want body is nu al een buffer. Dus body.toString("base64")
0
Berichten
93.699
Reputatie
0
Punten
1,27
Lid sinds
Laatst gezien
Nee je moet het wel in een buffer laden.
0

Jouw reactie

Deel je idee, stel een vraag of help een ander verder.

Editor laden…

Praat mee met de One2xs-community.

Inloggen om te reageren