Données EXIF, arrondir à la valeur standard
niquedouille
-
fiu -
fiu -
Titre complet : Données EXIF, arrondir à la valeur standard la plus proche
Bonjour,
Sur ma page, j'ai un formulaire d'envoit de fichiers. Je m'en sers pour uploader des images, et je stock les informations EXIF dans ma base de données mysql.
Tout fonctionne bien, ou presque.
Pour l'ouverture, il m'enregistre par exemple : 10/1 (ou 63/10)
J'aimerai qu'il m'enregistre 10 (ou 6,3)
J'ai configuré ma table sql avec FLOAT 2,1
Cela fonctionne bien pour la décimal, il m'affiche alors 9,9 (pour le résultat : 10/1)
Cette valeur est exacte, mais j'aimerai qu'il m'affiche un nombre "standard" :
f/1,4
f/1,8
f/2,0
f/2,2
f/2,5
f/2,8
...
f/10
f/11
etc... correspondant aux valeurs que l'on trouve sur un appareil photo.
Je ne sais pas trop comment m'y prendre pour coder cela. Sans me donner le code, pourriez-vous m'en donner les grandes lignes (en francais) ?
merci :)
Bonjour,
Sur ma page, j'ai un formulaire d'envoit de fichiers. Je m'en sers pour uploader des images, et je stock les informations EXIF dans ma base de données mysql.
Tout fonctionne bien, ou presque.
Pour l'ouverture, il m'enregistre par exemple : 10/1 (ou 63/10)
J'aimerai qu'il m'enregistre 10 (ou 6,3)
J'ai configuré ma table sql avec FLOAT 2,1
Cela fonctionne bien pour la décimal, il m'affiche alors 9,9 (pour le résultat : 10/1)
Cette valeur est exacte, mais j'aimerai qu'il m'affiche un nombre "standard" :
f/1,4
f/1,8
f/2,0
f/2,2
f/2,5
f/2,8
...
f/10
f/11
etc... correspondant aux valeurs que l'on trouve sur un appareil photo.
Je ne sais pas trop comment m'y prendre pour coder cela. Sans me donner le code, pourriez-vous m'en donner les grandes lignes (en francais) ?
merci :)
A voir également:
- Données EXIF, arrondir à la valeur standard
- Fuite données maif - Guide
- Exif date changer - Télécharger - Albums photo
- Trier des données excel - Guide
- Supprimer les données de navigation - Guide
- Les données fournies dans le fichier à télécharger peuvent être synthétisées par le tableau récapitulatif ci-dessous. dans le fichier, générez ce tableau automatiquement (tableau croisé dynamique ou table de pilote) à partir des quatre premières colonnes. il manque 5 valeurs dans le tableau ci-dessous. retrouvez-les dans votre tableau, puis reportez-les arrondies à l’entier le plus proche. ✓ - Forum Excel
7 réponses
Bonjour
Si j'ai compris ton problème, en fait, tout ce dont tu as besoin, c'est de définir ton champ en texte plutôt qu'en numérique.
Si j'ai compris ton problème, en fait, tout ce dont tu as besoin, c'est de définir ton champ en texte plutôt qu'en numérique.
heu.. non pas vraiment.
re-explication :
si je récupère par exemple "9,43434" je voudrai qu'il soit affiché : "9"
si je récupère par exemple "6,4114" je voudrai qu'il soit affiché : "6,3"
si je récupère par exemple "5,84343" je voudrai qu'il soit affiché : "5,6"
etc..
la valeur recupéré étant une valeur exacte
la valeur affiché étant la valeur la plus proche parmis les valeurs standard, qui sont :
f/1.2, f/1.4, f/2, f/2.8, f/4, f/5.6, f/8, f/11, f/16, et f/22 (en gros)
le "f/" je m'en tape, je peux l'afficher après ça.
re-explication :
si je récupère par exemple "9,43434" je voudrai qu'il soit affiché : "9"
si je récupère par exemple "6,4114" je voudrai qu'il soit affiché : "6,3"
si je récupère par exemple "5,84343" je voudrai qu'il soit affiché : "5,6"
etc..
la valeur recupéré étant une valeur exacte
la valeur affiché étant la valeur la plus proche parmis les valeurs standard, qui sont :
f/1.2, f/1.4, f/2, f/2.8, f/4, f/5.6, f/8, f/11, f/16, et f/22 (en gros)
le "f/" je m'en tape, je peux l'afficher après ça.
Je n'avais peut-être pas compris ton problème...
Tu mets les valeurs standard dans un tableau.
Tu calcules la valeur absolue de la différence entre la valeur fournie et chacune des valeurs du tableau. Tu gardes la ligne du tableau pour laquelle cette différence est la plus petite
Ceci peut être fait automatiquement par mysql si tu as rempli une table tblouv avec les valeurs standard dans le champ ouv :
SELECT ouv, abs( ouv - nouvellevaleur ) AS ecart FROM `tblouv` ORDER BY ecart LIMIT 1
Tu mets les valeurs standard dans un tableau.
Tu calcules la valeur absolue de la différence entre la valeur fournie et chacune des valeurs du tableau. Tu gardes la ligne du tableau pour laquelle cette différence est la plus petite
Ceci peut être fait automatiquement par mysql si tu as rempli une table tblouv avec les valeurs standard dans le champ ouv :
SELECT ouv, abs( ouv - nouvellevaleur ) AS ecart FROM `tblouv` ORDER BY ecart LIMIT 1
Cette fois t'es en plein dedans ;)
j'ai compris le principe, mais maintenant j'essaye de mettre en place directement avec mysql.. mais je ne maitrise pas les parametres que tu me donnes :
$f_recup = valeur récuperée (ex: 9.9)
fnumbers = nom de la table
f_sdt = valeur de la table fnumbers
<?php
mysql_query("SELECT f_std, abs(f_std - $f_recup) AS ecart FROM fnumbers ORDER BY ecart LIMIT 1");
?>
je ne vois pas bien quel résultat cette expression renvoit.
j'ai compris le principe, mais maintenant j'essaye de mettre en place directement avec mysql.. mais je ne maitrise pas les parametres que tu me donnes :
$f_recup = valeur récuperée (ex: 9.9)
fnumbers = nom de la table
f_sdt = valeur de la table fnumbers
<?php
mysql_query("SELECT f_std, abs(f_std - $f_recup) AS ecart FROM fnumbers ORDER BY ecart LIMIT 1");
?>
je ne vois pas bien quel résultat cette expression renvoit.
salut
pour ma part, j'aurais bien vu une table (j'ai pas creusé une solution basée sur des formules)
genre Ouvertures(oStd numeric, oMin numeric, oMax numeric)
ensuite on remplit la table avec oStd <= 2^(n/2), oMin <= 2^((2n-1)/4) et oMax <= 2^((2n+1)/4)
ensuite, d'un coup de patte, on update les extremes (n=1 et n=10) pour y mettre 0 et gogol
ensuite tu n'as plus qu'à requeter oStd where ta_donnée_EXIF between oMin and oMax
Ca te va ?
pour ma part, j'aurais bien vu une table (j'ai pas creusé une solution basée sur des formules)
genre Ouvertures(oStd numeric, oMin numeric, oMax numeric)
ensuite on remplit la table avec oStd <= 2^(n/2), oMin <= 2^((2n-1)/4) et oMax <= 2^((2n+1)/4)
ensuite, d'un coup de patte, on update les extremes (n=1 et n=10) pour y mettre 0 et gogol
ensuite tu n'as plus qu'à requeter oStd where ta_donnée_EXIF between oMin and oMax
Ca te va ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Il faut d'abord t'être connecté au serveur, et ensuite avoir sélectionné la base avant de pouvoir t'en servir.
mysql_connect($hote,$user,$password) or die(mysql_error());
mysql_selectdb($nomdetabase) or die(mysql_error());
Ensuite, mysql_query te rend un résultat (si tout va bien !) que tu peux exploiter avec mysql_fetch_array()
$resultat=mysql_query("SELECT f_std, abs(f_std - $f_recup) AS ecart FROM fnumbers ORDER BY ecart LIMIT 1") or die (mysql_error());
if ($ligne=mysql_fetch_array($resultat)) {
$valeurcherchee=$ligne['f_std'];
}
mysql_connect($hote,$user,$password) or die(mysql_error());
mysql_selectdb($nomdetabase) or die(mysql_error());
Ensuite, mysql_query te rend un résultat (si tout va bien !) que tu peux exploiter avec mysql_fetch_array()
$resultat=mysql_query("SELECT f_std, abs(f_std - $f_recup) AS ecart FROM fnumbers ORDER BY ecart LIMIT 1") or die (mysql_error());
if ($ligne=mysql_fetch_array($resultat)) {
$valeurcherchee=$ligne['f_std'];
}
Hello
donc, j'ai une jolie table Ouvertures avec des float
remplie avec des pow(2, ...) au lieu de 2^... :D
select nom, lieu, etc, oStd
from photos, lieux, etc, Ouvertures
where ...
and photos.ouverture between oMin and oMax
=> dans un cliché, ouverture vaut 1.9 => oStd contiendra 2
=> dans un autre cliché, ouverture vaut 6.1 => oStd contiendra 5.6
etc
Ça devrait être simple et rapide à intégrer car il n'y a pas de tri ni de LIMIT
donc, j'ai une jolie table Ouvertures avec des float
remplie avec des pow(2, ...) au lieu de 2^... :D
+--------+--------+--------+ ! oStd ! oMin ! oMax ! +--------+--------+--------+ ! 1.41421! 0 ! 1.68179! ! 2 ! 1.68179! 2.37841! ! 2.82843! 2.37841! 3.36359! ! 4 ! 3.36359! 4.75683! ! 5.65685! 4.75683! 6.72717! ! 8 ! 6.72717! 9.51366! !11.3137 ! 9.51366!13.4543 ! !16 !13.4543 !19.0273 ! !22.6274 !19.0273 !26.9087 ! !32 !26.9087 !1e+010 ! +--------+--------+--------+et maintenant, il n' y a plus qu'à s'en servir :
select nom, lieu, etc, oStd
from photos, lieux, etc, Ouvertures
where ...
and photos.ouverture between oMin and oMax
=> dans un cliché, ouverture vaut 1.9 => oStd contiendra 2
=> dans un autre cliché, ouverture vaut 6.1 => oStd contiendra 5.6
etc
Ça devrait être simple et rapide à intégrer car il n'y a pas de tri ni de LIMIT
Salut
désolé, j'ai oublié de répondre !!!! Quel ingrat :)
Merci beaucoup, "lepere". Je connais les requetes mysql, mais je ne connaissait pas le "AS ECART"
J'avais essayé tel que tu l'as écrit, mais j'avais fait une petite erreur de code un peu au dessus, rien de grave. C'est donc corrigé, et cela fonctionne parfaitement ! Encore merci de ton aide !
flu> j'avoue ne pas comprendre parfaitement ta méthode !!!
désolé, j'ai oublié de répondre !!!! Quel ingrat :)
Merci beaucoup, "lepere". Je connais les requetes mysql, mais je ne connaissait pas le "AS ECART"
J'avais essayé tel que tu l'as écrit, mais j'avais fait une petite erreur de code un peu au dessus, rien de grave. C'est donc corrigé, et cela fonctionne parfaitement ! Encore merci de ton aide !
flu> j'avoue ne pas comprendre parfaitement ta méthode !!!