In het kader van school ben ik bezig met foto bewerking in JavaScript. Hiervoor gebruik ik voornamelijk 2 JS libraries, jQuery en CamanJS. Alleen loop ik tegen een probleem aan waar ik maar niet kan zien wat ik verkeerd doe. Ik weet dat ik in de hoek van scope moet kijken en dat daar mijn fout ligt
De situatie is op dit moment zo; een gebruiker kan uit een <ul> lijst kiezen welke van zijn eigen geuploade fotos hij wil bewerken. Op het moment dat hij deze gekozen heeft wordt deze geplaatst in een <canvas> met de ID genaamd "active", zal de foto geschaald worden afhankelijk van de resolutie van het scherm van de gebruiker (om te voorkomen dat je een foto met een resolutie van 8000x4000 op een scherm laat zien van 1680x1050 en je de hele interface niet meer kan zien) en dit word helemaal afgehandeld door CamanJS. Daarna kan de gebruiker aan de rechter kant van het scherm kiezen voor een aantal filters over de foto heen. Zoals zwart-wit en sepia. Op moment dat de gebruiker klaar is met bewerken, klikt die op de knop "bevestig", word er een AJAX call gedaan naar de PHP zijde waardoor de wijzigingen in de foto opgeslagen word. Deze AJAX call bestaat voornamelijk uit een Base64 string encoding van het <canvas> element.
Alleen wat ik eerst vergeten was, zodra je een <canvas> element andere dimensies meegeeft en je vraagt daar vervolgens de Base64 encoded versie van op heeft die Base64 string ook die verkleinde dimensies. Dus wat er eerst gedaan moet worden is die canvas terug zetten naar de oorspronkelijke dimensies, daar de Base64 string van opvragen en dan weer terug schalen naar de "oude" dimensies.
Dit is de code waarbij het fout gaat. Op het moment dat als dit uitgevoerd word, dan krijg ik netjes de Base64 string terug.
Maar als ik op regel 39 vervolgens de
output bekijk dan krijg ik daar alleen maar een empty string terug... Terwijl ik een paar regels daarvoor wel netjes mijn verwachte output kreeg....
Wat ik al geprobeerd heb;
- Andere variabelen namen (misschien toch nog ergens de hoop dat mijn eigen bedachte variabelen misschien er anders gebruikt werden / ook gebruikt werden door de browser
)
- Global variabelen
- Object gemaakt
De situatie is op dit moment zo; een gebruiker kan uit een <ul> lijst kiezen welke van zijn eigen geuploade fotos hij wil bewerken. Op het moment dat hij deze gekozen heeft wordt deze geplaatst in een <canvas> met de ID genaamd "active", zal de foto geschaald worden afhankelijk van de resolutie van het scherm van de gebruiker (om te voorkomen dat je een foto met een resolutie van 8000x4000 op een scherm laat zien van 1680x1050 en je de hele interface niet meer kan zien) en dit word helemaal afgehandeld door CamanJS. Daarna kan de gebruiker aan de rechter kant van het scherm kiezen voor een aantal filters over de foto heen. Zoals zwart-wit en sepia. Op moment dat de gebruiker klaar is met bewerken, klikt die op de knop "bevestig", word er een AJAX call gedaan naar de PHP zijde waardoor de wijzigingen in de foto opgeslagen word. Deze AJAX call bestaat voornamelijk uit een Base64 string encoding van het <canvas> element.
Alleen wat ik eerst vergeten was, zodra je een <canvas> element andere dimensies meegeeft en je vraagt daar vervolgens de Base64 encoded versie van op heeft die Base64 string ook die verkleinde dimensies. Dus wat er eerst gedaan moet worden is die canvas terug zetten naar de oorspronkelijke dimensies, daar de Base64 string van opvragen en dan weer terug schalen naar de "oude" dimensies.
JavaScript:
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
| $('#confirm').click(function() { window.halloWereld = { 'miauw':'' }; Caman("#active", function() { // Gets the original imageHeight + imageWidth var orgHeight = Caman("#active").imageHeight(); var orgWidth = Caman("#active").imageWidth(); // Gets the current height + width; var viewHeight = Caman("#active").height; var viewWidth = Caman("#active").width; // Now we resize it back to the original dimensions this.resize({ height: orgHeight, width: orgWidth }); this.render(); // Now we fetch the Base64 representation of the canvas element window.halloWereld.miauw = document.getElementById("active").toDataURL("image/jpeg"); console.log(window.halloWereld.miauw); // Now we resize back to the viewing dimensions this.resize({ height: viewHeight, width: viewWidth }) this.render(); }); console.log(window.halloWereld.miauw); // Hierna komt de AJAX call }); |
Dit is de code waarbij het fout gaat. Op het moment dat als dit uitgevoerd word, dan krijg ik netjes de Base64 string terug.
JavaScript:
1
2
| document.getElementById("active").toDataURL("image/jpeg"); console.log(halloWereld.miauw); |
Maar als ik op regel 39 vervolgens de
JavaScript:
1
| console.log(halloWereld.miauw); |
output bekijk dan krijg ik daar alleen maar een empty string terug... Terwijl ik een paar regels daarvoor wel netjes mijn verwachte output kreeg....

Wat ik al geprobeerd heb;
- Andere variabelen namen (misschien toch nog ergens de hoop dat mijn eigen bedachte variabelen misschien er anders gebruikt werden / ook gebruikt werden door de browser

- Global variabelen
- Object gemaakt
[ Voor 0% gewijzigd door Hertog6 op 14-12-2014 17:27 . Reden: Typo's ]
MacBook Pro Mid 2012 16Gb RAM | Xiaomi Mi2S 32 Gb