[PHP] dynamische gif

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben bezig met een stukje code waarmee ik data uit mysql ophaal om vervolgens een GIF van te maken.

Het maken hiervan gaat prima, maar wanneer ik de eigenschappen van dit plaatje bekijk is niet bekend hoeveel bytes het is.

Als ik het op wil slaan, wordt het opgeslagen als een BMP...

Mis ik ergens nog een "header( )", of is er nog een andere manier om deze data aan IE te vertelen.


Hieronder staat volgens mij de belangrijkste code
PHP:
1
2
3
4
5
6
7
    $image = imagecreate($IMGWidth, $IMGHeight);

    // dynamische code (data uit mysql)

    header("Content-type: image/gif");
    imagegif($image);       
    imagedestroy($image);

Acties:
  • 0 Henk 'm!

  • Kix@$$
  • Registratie: December 2001
  • Laatst online: 17:42
je moet ook een header Content-length meegeven met het aantal bytes van het plaatje ;)

Acties:
  • 0 Henk 'm!

  • mosymuis
  • Registratie: Maart 2002
  • Laatst online: 27-04 11:53
En in plaats van de image*() functies kan je $image ook gewoon direct echo'en naar de browser. Werkt hetzelfde.

[ Voor 4% gewijzigd door mosymuis op 02-06-2005 16:06 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

mosymuis schreef op donderdag 02 juni 2005 @ 16:05:
En in plaats van de image*() functies kan je $image ook gewoon direct echo'en naar de browser. Werkt hetzelfde.
Nee, juist niet. Wanneer je $image direct echo't dan heb je het in een standaard, ongecomprimeerd formaat (voor zover ik weet). Je maakt daarmee dus een ongecomprimeerd plaatje met een content-type header die daar niet bij hoort, en dus effectief geen gif.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • SH4D3H
  • Registratie: Juni 2004
  • Laatst online: 27-02 23:46
Kix@$$ schreef op donderdag 02 juni 2005 @ 16:03:
je moet ook een header Content-length meegeven met het aantal bytes van het plaatje ;)
Dat heb ik nou nog nooit hoeven doen.

Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Header moet helemaal bovenaan de code komen. Ik weet niet wat $image = imagecreate($IMGWidth, $IMGHeight) is, maar zet het eens onder header.

Acties:
  • 0 Henk 'm!

  • mosymuis
  • Registratie: Maart 2002
  • Laatst online: 27-04 11:53
-NMe- schreef op donderdag 02 juni 2005 @ 16:07:
[...]

Nee, juist niet. Wanneer je $image direct echo't dan heb je het in een standaard, ongecomprimeerd formaat (voor zover ik weet). Je maakt daarmee dus een ongecomprimeerd plaatje met een content-type header die daar niet bij hoort, en dus effectief geen gif.
Als de plaatjes 1:1 in een MySQL BLOB zijn geladen, bijvoorbeeld met file_get_contents() of fread(), kan je ze er ook zo weer uitladen en echo'en naar de client.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Noork schreef op donderdag 02 juni 2005 @ 16:11:
Header moet helemaal bovenaan de code komen. Ik weet niet wat $image = imagecreate($IMGWidth, $IMGHeight) is, maar zet het eens onder header.
Hoeft niet. :) imagecreate() verstuurt geen output naar de browser, dus kun je daarna nog prima headers versturen. Sowieso doet het plaatje het wel, alleen ziet TS er bij het bekijken van de eigenschappen geen informatie van de bestandsgrootte van.

Trouwens, ik heb dat probleem wel eens gehad met willekeurige plaatjes in Internet Explorer. Gebruik je dat toevallig? Doet Firefox het wel netjes?
mosymuis schreef op donderdag 02 juni 2005 @ 16:12:
[...]

Als de plaatjes 1:1 in een MySQL BLOB zijn geladen, bijvoorbeeld met file_get_contents() of fread(), kan je ze er ook zo weer uitladen en echo'en naar de client.
Dat zei je er in je vorige post niet bij, en verder lees ik ook nergens dat de plaatjes uit MySQL komen. ;) Verder ga je dus echt geen plaatjes inlezen met fread, daar heeft PHP mooie functies voor. ;)

[ Voor 30% gewijzigd door NMe op 02-06-2005 16:14 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • mosymuis
  • Registratie: Maart 2002
  • Laatst online: 27-04 11:53
-NMe- schreef op donderdag 02 juni 2005 @ 16:13:
en verder lees ik ook nergens dat de plaatjes uit MySQL komen. ;)
Dat kan je hier uit opmaken;
Verwijderd schreef op donderdag 02 juni 2005 @ 16:02:
PHP:
1
    // dynamische code (data uit mysql)
-NMe- schreef op donderdag 02 juni 2005 @ 16:13:Verder ga je dus echt geen plaatjes inlezen met fread, daar heeft PHP mooie functies voor. ;)
Mijn punt is dus juist dat je die functies niet nodig hebt als je de plaatjes direct uit een database trekt (en uit timmie2's post begreep ik dat hij dat bedoelde).

Acties:
  • 0 Henk 'm!

  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05 09:40

GX

Nee.

mosymuis schreef op donderdag 02 juni 2005 @ 16:27:
[...]

Dat kan je hier uit opmaken;
Dus als ik een plaatje maak gebaseerd op data uit de database (stel, een grafiek?), dan heb ik dat plaatje 1:1 in de database zitten? Tevens stond er ook nog "Dynamische code" bij, het lijkt mij bijzonder vreemd als je veel code, dat dynamisch plaatjes maakt, van een statische image uit de database.

Overigens is images hard in de database opslaan een erg smerige methode en er zou ook nog naar mijn mening een lijfstraf op moeten staan.

[ Voor 17% gewijzigd door GX op 02-06-2005 16:43 ]


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

IE die plaatjes opslaat als .bmp is een bekende bug (die er al eeuwen inzit). Je cache leeggooien helpt altijd (eventjes).

Intentionally left blank

Pagina: 1