Image [inline], Mise à l'échelle [résolu] et Propagation de paramètres - PHP - Programmation
Marsh Posté le 12-12-2003 à 11:54:26
Passe en POST !
EDIT :
Je suis trop con moi !
En POST dans une balise IMG
Oublie ce que j'ai dit...
Marsh Posté le 12-12-2003 à 11:56:37
Est-ce que tu utilise les sessions ?
Marsh Posté le 12-12-2003 à 12:29:09
Mara's dad a écrit : Est-ce que tu utilise les sessions ? |
Ah non, pas du tout...
Mmmh, ah tu veux dire que je pourrais sauvegarder toutes ces données dans un cookie de session (ou même un simple cookie) et les récupérer depuis "image.php" ?
C'est pas bête, je n'y avais pas pensé...
En plus, si je me rappelle, la limite est d'en gros 4096 octets par cookie, mais je peux prévoir de découper ma valeur obtenue en base64 en plusieurs cookies si besoin est.
Judicieux, merci !
Marsh Posté le 12-12-2003 à 12:35:16
Je pensais plutôt à des Vraies sessions.
Un cookie ou une URL avec un ID de session, et les données associées stockées bien au chaud sur le serveur.
Sinon, tes données, elle viennent d'où ?
Elle sont saisies ou tu va les chercher en base de donnée...
Si tu va les chercher, ben ton script de génération de graphique doit pouvoir le faire aussi avec les bon paramètres.
Marsh Posté le 12-12-2003 à 13:17:01
Mara's dad a écrit : Je pensais plutôt à des Vraies sessions. |
Ah ok, je n'ai jamais utilisé. Oui, je viens de regarder la doc PHP, je comprends en gros comment ça marche. C'est même plus logique, pas besoin de faire se balader les données et l'utilisateur ne peut pas les modifier (c'est pas trop gênant ici, mais bon...)
Citation : |
Oui, bien sûr, je pourrais ré-exécuter la requête, mais c'est ça qui est le plus long et de plus, le script "image.php" est assez générique, je pourrais en avoir besoin pour afficher des tableaux de données à 2 dimensions non issus d'une base de données.
En tout cas, merci pour les infos sur les sessions
Marsh Posté le 12-12-2003 à 14:22:45
A propos de mon problème de mise à l'échelle, je viens de trouver une solution qui marche plutôt bien. J'ai pris le parti d'avoir un pas de 1, 2 ou 5 (à une puissance de 10 près), ce qui est couramment le cas.
Je calcule d'abord la valeur maximale de mon tableau (stockée dans $maxval).
J'initialise un tableau ($ypas) avec les pas qui m'intéressent, tableau indicé de 0 à n.
Code :
|
Ensuite, je divise ma valeur maximale $maxval par 10. C'est arbitraire, ça signifie que je choisis en gros d'avoir 10 intervals de données. Si le graphique est assez grand (taille en pixel), on peut choisir 15 ou 20, et 5 ou 6 s'il est petit. C'est la variable $evalpas.
Enfin, je compare les pas "corrects" du tableau $ypas avec cette valeur et je prend la valeur inférieure la plus proche, valeur qu'on va stocker dans $yechelle
Code :
|
Enfin, on calcule la valeur maximale absolue de notre graphique, qui sera supérieure à notre valeur max ; on la détermine en partant de $yechelle :
Code :
|
Voilà, maintenant on peut faire les calculs nécessaires pour faire cadrer les données dans l'image.
Si ça intéresse quelqu'un, voilà le résultat que j'obtiens :
Y a des trucs à redire sur les couleurs, mais j'ai fait ça à la louche, et ça pourrait être pire
Marsh Posté le 12-12-2003 à 17:18:25
Une autre solution pour les images, qui ne nécessite qu'un seul script : il suffit de faire afficher les images dans la page HTML ("inline" ), comme parfois dans les mails ; c'est tout bête (enfin, il faut le savoir). D'ailleurs, ça marche aussi pour d'autres types de contenu, pas seulement les images. Il suffit d'encoder l'image en base64 et d'utilser la balise <img> de la mnière suivante :
<img src="data:image/png;base64,données....." alt="blah" />
Lien où j'ai trouvé ça :
http://www.selfhtml.com.fr/article [...] ne-images/
(et aussi la RFC 2397 http://www.ietf.org/rfc/rfc2397.txt)
Avec PHP, il faut d'abord activer le tampon de sortie ("output buffering", fonction ob_start()) avant d'appeler les fonctions imagepng() ou imagejpeg().
Code :
|
Très pratique, on n'a qu'un seul fichier (HTML), même s'il y a plusieurs images, dans le cas où c'est un rapport qu'on veut transférer ou archiver. Certes, ça prend un peu plus de place qu'avec les images PNG, en gros 30% de plus par image, à cause du codage en base 64 (mais j'ai la place ).
Edit: ah oui, a priori, ça ne marche pas avec MS IE 4-5.x. Pour IE 6, je ne sais pas. En tout cas, avec Mozilla (Gecko), c'est nickel.
Marsh Posté le 12-12-2003 à 11:46:56
Bonjour à tous
* Voilà, j'ai une application qui des informations dans une base de données et qui stocke ces données sous la forme d'un tableau à 2 dimensions. Pas de problèmes pour l'afficher/le manipuler.
Maintenant, je veux afficher ces données sous la forme d'un graphique, mais je voudrais avoir une échelle correcte : par exemple, la valeur maximale que j'extrais de mon tableau est 7833, et donc je voudrais pouvoir afficher une ligne tous les 1000 (et monter jusqu'à 8000), plutôt qu'avoir un pas de 783, ce qui n'est pas très parlant pour comparer avec d'autres graphes. Je ne peux pas utiliser d'échelle fixe parce que les différents ensembles de données que je trace peuvent avoir un maximum de 90 à 20000 (je ne le sais pas a priori).
J'ai une vague idée, mais je sèche un peu, donc si vous avez un algo qui calcule la meilleure échelle (ou un lien vers), ça m'intéresse.
* Deuxième chose, c'est plus pour savoir comment vous vous faites : je récupère donc mes données dans un tableau à 2 dimensions (grâce à la page "index.php" ) et je veux créer une image à partir de ça (après avoir affiché ces valeurs sous forme de texte). Je vois en gros 3 solutions avec PHP :
J'utilise la dernière solution puisque j'ai une contrainte assez forte : je ne peux pas écrire de fichiers dans l'arborescence Web. La deuxième pourrait permettre d'écrire un fichier hors de l'arborescence, mais ça risque de poser des problèmes avec le safe_mode PHP.
En gros je fais ça :
Puis
Notez que ça marche plutôt bien ; MS IE pose problème quand le tableau devient gros à cause de la chaine "data" trop longue passée par GET, semble-t-il, mais ça ne me dérange pas. Néanmoins, si vous utilisez une autre à laquelle je n'ai pas pensé, je suis tout ouïe.
Edit: zut, j'aurais du créer 2 messages, c'est un peu long, ça... Bref, trop tard...
Message édité par unk00 le 12-12-2003 à 18:13:58