Toon posts:

[PHP] Afbeeldingen 'on the fly' opslaan in variabelen

Pagina: 1
Acties:

Onderwerpen


Verwijderd

Topicstarter
Is het mogelijk een afbeelding 'on the fly' op te slaan in een sessie-variabele, zodat je hem op volgende pagina´s kan gebruiken?

Op het moment krijg ik het alleen op de volgende manier voor elkaar:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php

$filename = uniqid("");

imagepng($image_resource, "temp/" . $filename);

$filehandle = fopen("temp/" . $filename, "r");  

$_SESSION["image"] = fread($filehandle, filesize("temp/" . $filename));

fclose($filehandle);

unlink("temp/" . $filename);

?>


Liever zou ik het opslaan van plaatjes in variabelen op de volgende manier doen:
PHP:
1
2
3
4
5
6
<?php

//Pseudo functie -> sla het plaatje op in een var
imagepng_store_in_var($image_resource, $_SESSION["image"]);

?>



Op zo´n manier zou ik plaatjes dan gemakkelijk bv. kunnen 'resizen' etc. en dan 'on the fly' kunnen opslaan in een variabele voor verder gebruik, zonder het plaatje eerst te hoeven opslaan en het later weer uit te lezen... :)

  • slm
  • Registratie: Januari 2003
  • Laatst online: 12-11-2023

slm

Lijkt me niet echt handig om een heel plaatje in een sessievariabele op te slaan. Je zou het eventueel in een database kunnen opslaan gelinkt met de sessionid, maar dan krijg je weer het verhaal blobs in db's of niet, en bovendien is dit ook een extra handeling net als het opslaan als een tempfile.
Ik weet niet precies hoe zo'n sessievariabele heen en weer gezonden wordt, maar volgens mij is het niet meer dan een veredelde cookie, waardoor je dus bij iedere request een heel plaatje upt.

Daarnaast lijkt het me schier onmogelijk met de GD van PHP. Heel misschien werkt het als je imagepng() zou afgevangen kunnen worden met ob_start() en ob_get_contents()

To study and not think is a waste. To think and not study is dangerous.


  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 01:06
Ik weet niet precies hoe zo'n sessievariabele heen en weer gezonden wordt, maar volgens mij is het niet meer dan een veredelde cookie, waardoor je dus bij iedere request een heel plaatje upt.
Sessions zijn serverside cookies, alleen de sessionid wordt soms met de url mee verzonden.

Ik zou ze in een aparte tabel zetten gekoppeld aan een sessionid. Dan moet je wel zorgen dat je niet te lang een sessie laat bestaan. Anders kost het teveel geheugen.

  • slm
  • Registratie: Januari 2003
  • Laatst online: 12-11-2023

slm

ok :) weet ik dat ook weer. Blijft idd het geheugen probleem bij de server. Met een beetje bezoek op je pagina....

To study and not think is a waste. To think and not study is dangerous.


  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 01:06
Ik weet niet hoe groot je afbeeldingen zijn, want daar is een beetje de keuze bestandsysteem/filesystem op gebaseerd. Bij kleine afbeeldingen zou ik het in een aparte tabel nog wel durven.

Waarom moeten er trouwens plaatjes op deze manier bewaard blijven? Wat wil je gaan maken, want die afbeeldingen staan toch al op de server? Of zijn het afbeeldingen van de gebruiker?

Verwijderd

Topicstarter
djluc schreef op 04 September 2003 @ 20:57:
[...]
Sessions zijn serverside cookies, alleen de sessionid wordt soms met de url mee verzonden.

Ik zou ze in een aparte tabel zetten gekoppeld aan een sessionid. Dan moet je wel zorgen dat je niet te lang een sessie laat bestaan. Anders kost het teveel geheugen.
Wat bedoel je met tabel? Bedoel je daarmee bv. een MySQL-tabel of meer een tabel in het geheugen van de server of zoiets?

Ik ga nu gewoon een functie maken voor dat 'resizen' enzo, zodat ik alleen wat waarden door hoef te geven, waarmee de functie weer een plaatje genereert.

Voorbeeld:

Url: save_pic.php?pic=mijnpasfoto&height=200&width=100

Pagina: SavePic($_GET("pic"), $_GET("height"), $_GET("width"));

:)

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 01:06
Ja, maar wat wil je met die plaatjes gaan doen? Moeten die bewaard blijven of moeten die na het tonen aan de gebruiker meteen weg? Afbeeldingen in sessions is not done. In een tabel in MySQL, ken geen server tabellen, zou wel kunnen.

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 23:42

thomaske

» » » » » »

Je kan met de Output Control functions van PHP de output van een bepaalde functie (imagepng) 'opvangen' in een variabele.

dit is wat ik bedoel

[goede-bui-mode]
PHP:
1
2
3
4
5
6
function imagepng_store_in_var($image_resource, &$the_image_var) {
    ob_start(); 
    imagepng($image_resource); 
    $the_image_var = ob_get_contents(); 
    ob_end_clean(); 
}
[/goede-bui-mode] :)

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


  • Macros
  • Registratie: Februari 2000
  • Laatst online: 29-10 20:56

Macros

I'm watching...

Sessies worden ook opgeslagen op de harde schijf van je server, dus of je het nu zelf opslaat of als een sessie, opgeslagen op de harde schijf wordt het toch. Dan lijkt me het zelf makkelijker om de files zelf op te slaan op de harde schijf.

"Beauty is the ultimate defence against complexity." David Gelernter


  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 02-10 12:59
Je kan beter zorgen dat je wat extra headers met die afbeeldingen meezendt zodat de browser ze cached. Op die manier laat een pagina volgens mij veel sneller dan dat je ze serverside cached.

  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 16-08 17:16
stekkel schreef op 04 September 2003 @ 23:05:
Je kan beter zorgen dat je wat extra headers met die afbeeldingen meezendt zodat de browser ze cached. Op die manier laat een pagina volgens mij veel sneller dan dat je ze serverside cached.
Als je een plaatje in een sessie zet wordt hij inderdaad bij elke request opnieuw in zijn geheel doorgestuurd. Aangezien hij voor de hele sessie hetzelfde blijft (ga ik van uit) is het handiger om hem ergens in de uri-space onder een bogus-naam.jpg op te slaan. Op die manier wordt de caching door de webserver geregeld.

Zie ook deze post en die eronder.

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.

Pagina: 1