Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[pour test et correction] Upload images

12 réponses
Avatar
SAM
Salutatous,

Alors voici, après mes premiers déboires(*), je pense que j'approche de
qque chose qui pourrait tenir la route.
(en moins de 200 lignes, commentaires, vides et html compris)

Pour essayer c'est ici :
<http://je.m.arrete.free.fr/photos_upload/>
Essayez tt de même de ne pas faire trop fort, Free est qque fois
pointilleux vis à vis de ce qu'on y bricole :-(
Je supprime cet essai ce vendredi ainsi que vos uploads qui seraient passés.

Pour le code c'est là :
<http://je.m.arrete.free.fr/photos_upload/sam_upload.txt>
Merci de bien vouloir vous y pencher et de me faire vos remarques.

J'ai mis un bout de code qui m'est incompréhensible pour allouer la
mémoire soi-disant nécessaire aux opérations de redimensionnements.
(si Free l'autorise ?)

Je n'ai pas contrôlé les fichiers par la méthode exif.

Je n'ai pas utilisé de classe comme Marc le proposait (je n'ai pas bp
regardé son code non plus, préférant tourner ma sauce moi-même, mais je
le ferai bientôt).
À propos, la classe est appelée par require_once m'a t-il semblé.
Faudra que je vois la diff d'avec include.

Voilà.
à ++

(*) post : Verification upload photos par formulai re
--
sm

10 réponses

1 2
Avatar
alex.vaure
SAM wrote:

Pour essayer c'est ici :
<http://je.m.arrete.free.fr/photos_upload/>
Essayez tt de même de ne pas faire trop fort, Free est qque fois
pointilleux vis à vis de ce qu'on y bricole :-(



Bon, ben, ça a l'air de marcher...
Je viens d'y poser une photo sans problème, par contre, pourquoi y a
deux fois la photo, et pourquoi y'a ce texte dessous : "Erreur #0 = tout
est OK"

--
Alex
Vous avez beau dire, y'a pas seulement que de la pomme, y'a aut'chose.
Ça serait pas dès fois de la betterave, hein ?
Avatar
CrazyCat
SAM wrote:
J'ai mis un bout de code qui m'est incompréhensible pour allouer la
mémoire soi-disant nécessaire aux opérations de redimensionnements.
(si Free l'autorise ?)



Ton bout de code est compréhensible :) En fait, c'est le calcul du poids
de l'image (nombres de pixels * bits par pixel * nombre de canaux de
l'image) divisé par 8 (pour avoir en octets et non pas en bits).
J'ai une petite interrogation sur le pow(2,16), mais ça doit avoir sa
raison :)
La multiplication par 1.65 doit être pour avoir une marge valable.

Je n'ai pas contrôlé les fichiers par la méthode exif.



Toutes les images n'ayant pas forcément des infos exif (je crois), ce
n'est pas plus mal.

Je n'ai pas utilisé de classe comme Marc le proposait (je n'ai pas bp
regardé son code non plus, préférant tourner ma sauce moi-même, mais je
le ferai bientôt).



Oui, ce serait mieux.

À propos, la classe est appelée par require_once m'a t-il semblé.
Faudra que je vois la diff d'avec include.



La différence est au niveau des erreurs d'inclusion. Un require produit
une erreur fatale (E_ERROR) alors qu'include provoque une alerte
(E_WARNING).

La seule critique que je te ferais, c'est de ne pas séparer ton html de
ton php, et surtout de mettre une fonction en plein milieu :)

--
Réseau IRC Francophone: http://www.zeolia.net
Aide et astuces : http://www.g33k-zone.org
Communauté Francophone sur les Eggdrops: http://www.eggdrop.fr
Avatar
SAM
Le 10/7/09 12:15 PM, Alex Vaure a écrit :
SAM wrote:

Pour essayer c'est ici :
<http://je.m.arrete.free.fr/photos_upload/>
Essayez tt de même de ne pas faire trop fort, Free est qque fois
pointilleux vis à vis de ce qu'on y bricole :-(



Bon, ben, ça a l'air de marcher...
Je viens d'y poser une photo sans problème, par contre, pourquoi y a



Le test est surtout pour les fichiers qui ne sont pas des images
et surtout ceux qui tenteraient de se faire passer pour une image,
les 2 devant être refusés, de préf avant réel upload.

deux fois la photo, et pourquoi y'a ce texte dessous : "Erreur #0 = tout
est OK"



Ben ...
- le gars il envoie sa photo (3200/2400 <2Mo)
- le truc la vérifie (objet du test et corrigés)
- le truc la resize en 600/480 et sauve celle-là
- le truc la resize en 200/150 et sauve celle-là
- le truc efface l'uploadé
- le truc affiche donc la grande vue et sa vignette pour contrôle
(bientôt l'ajout de suppression/remplacement des vues si !ok)
- le truc réaffirme que pas d'erreur tout est OK

Bon, faut pas trop se prendre la tête avec les affichages textuels,
c'est plutôt pour du débogage à l'heure actuelle.
Y a même pas de css pour faire joli.

Si on coche la case et valide ça affiche l'ensemble des vignettes
enregistrées, pas besoin d'uploader qque chose dans ce cas.
Le clic sur une des diapos montrées affiche (en JavaScript ça m'est +
facile) la grande vue.

Pour l'heure les images sont pas trop moches ;-)
Merci.

Me reste à voir si on peut (facilement ?) transformer un png en jpg.
Les png ou gif avec transparence n'ont aucun intérêt pour le résultat
espéré, et il me semble que les jpg fatiguent moins et le serveur et les
brouteurs.

--
sm
Avatar
SAM
Le 10/7/09 12:15 PM, CrazyCat a écrit :
SAM wrote:
J'ai mis un bout de code qui m'est incompréhensible pour allouer la
mémoire soi-disant nécessaire aux opérations de redimensionnements.
(si Free l'autorise ?)



Ton bout de code est compréhensible :) En fait, c'est le calcul du poids
de l'image (nombres de pixels * bits par pixel * nombre de canaux de
l'image) divisé par 8 (pour avoir en octets et non pas en bits).



Je sais lire une multiplication ;-)
Mais d'où sort ce calcul ?

Est-ce que ça peut impressionner Free ?
(qu'il alloue + de mémoire si besoin)
Faudrait avoir une grande image de poids <=2Mo à essayer.
Je viens d'essayer avec un jpg de 1,9Mo,
résultat :
Mémoire utilisée : 21679522 contre 129816
est-ce à dire que la mémoire de base est de 129816
et que là ça a demandé (et obtenu) 21679522
?

Je n'ai pas contrôlé les fichiers par la méthode exif.



Toutes les images n'ayant pas forcément des infos exif (je crois), ce
n'est pas plus mal.



C'est un peu mon sentiment aussi.
Faut juste que je sois certain que
getimagesize()
élimine vraiment tout fichier non image.
Et que ça marche sur le fichier temporaire.
Car après les contrôles par redimensionnement se font sur un vrai fichier.
Arggh! je crois avoir oublié de l'effacer si les redimensionnements
échouent.
enfin ... si mon truc de résultat de ceux-ci tient la route ?!
($ok1 et $ok2)

Par contre, et pour revenir sur les histoires de mémoire,
lors d'1 de mes essais avec un png, Free m'a gueulé à l'arnaque de
mémoire ;-(
Je n'ai pas eu ce pb avec des jpg.
Les png, c'est sûr que c'est plus lourd à bouger, surtout que j'essaie
de les compresser au max au passage.
Je vais peut-être supprimer cette option, non?
(GaphicConverteur prend 50% de mon CPU et qques mns à traiter ça, je
suppose qu'un serveur aussi a besoin de ressources, que le temps
d'attente va être dépassé)
Bon! mon jpg de 1,9Mo GC l'a passé en png de 8Mo ! Super :-(


Je n'ai pas utilisé de classe comme Marc le proposait (je n'ai pas bp
regardé son code non plus, préférant tourner ma sauce moi-même, mais
je le ferai bientôt).



Oui, ce serait mieux.



C'est mieux une classe ?
Faut que je pense à me renseigner alors.
Une piste ?

La seule critique que je te ferais, c'est de ne pas séparer ton html de
ton php, et surtout de mettre une fonction en plein milieu :)



Là c'est pour avoir tout dans le même fichier.
Ben ... ça essaie de suivre un ordre logique.
Et puis, dans le html pourquoi pas ?
C'est bien séparé, presque tt le php d'un bloc.
Il y a bien assez à scroller dans les 90 lignes de php sans en plus
remonter avant le head.

Mébon, bien sûr ça ne va pas rester comme ça, c'est pour le test et les
corrigés de fonctions de contrôles et sauvegarde.

Merci d'être passé.
--
sm
Avatar
CrazyCat
SAM wrote:
Ton bout de code est compréhensible :) En fait, c'est le calcul du
poids de l'image (nombres de pixels * bits par pixel * nombre de
canaux de l'image) divisé par 8 (pour avoir en octets et non pas en
bits).


Je sais lire une multiplication ;-)
Mais d'où sort ce calcul ?



C'est le calcul "normal", qui est très bien expliqué sur
<http://www.galerie-photo.com/resolution.html>

Est-ce que ça peut impressionner Free ?



Il est possible que free l'autorise dans une certaine mesure, il faut
faire des tests.

Faut juste que je sois certain que
getimagesize()
élimine vraiment tout fichier non image.
Et que ça marche sur le fichier temporaire.



getimagesize() fonctionne aussi avec les swf. Il n'y a normalement aucun
souci pour travailler sur les fichiers temporaires.


Je n'ai pas utilisé de classe comme Marc le proposait (je n'ai pas bp
regardé son code non plus, préférant tourner ma sauce moi-même, mais
je le ferai bientôt).


Oui, ce serait mieux.


C'est mieux une classe ?
Faut que je pense à me renseigner alors.
Une piste ?



J'avais commencé à en coder une, mais il faudrait que je l'achève enfin :)

Tu peux peut-être regarder du côté de
<http://mambo-developer.org/api/nav.html?mambots/editors/mostlyce/jscripts/tiny_mce/imagemanager/Classes/ImageManager.php.html>
pour t'inspirer.

La seule critique que je te ferais, c'est de ne pas séparer ton html
de ton php, et surtout de mettre une fonction en plein milieu :)


Là c'est pour avoir tout dans le même fichier.
Ben ... ça essaie de suivre un ordre logique.
Et puis, dans le html pourquoi pas ?
C'est bien séparé, presque tt le php d'un bloc.



Oui, c'est effectivement facile à suivre, pour le test de fonctionnement :)

--
Réseau IRC Francophone: http://www.zeolia.net
Aide et astuces : http://www.g33k-zone.org
Communauté Francophone sur les Eggdrops: http://www.eggdrop.fr
Avatar
Alarch
CrazyCat wrote:

SAM wrote:
Je n'ai pas utilisé de classe comme Marc le proposait (je n'ai pas bp
regardé son code non plus, préférant tourner ma sauce moi-même, mais
je le ferai bientôt).


Oui, ce serait mieux.


C'est mieux une classe ?
Faut que je pense à me renseigner alors.
Une piste ?



J'avais commencé à en coder une, mais il faudrait que je l'achève enfin :)




Je peux te passer ma classe si tu veux, elle est un peu commentée mais
peut-être pas assez, elle n'était pas prévue pour "diffusion", mais ça
pourrait te fournir une base de départ. Si ça t'intéresse écris-moi en
privé que je t'envoie le fichier. Bien entendu j'essayerai de bien
t'expliquer comment l'utiliser, elle fait partie d'une sorte de "framework"
maiso, donc il faudra ajuster un ou deux trucs, mais elle devrait
fonctionner avec peu de règlages.
Avatar
SAM
Le 10/7/09 9:12 PM, CrazyCat a écrit :
SAM wrote:



Tiens, au fait, puisque tu as l'air de t'y connaitre, comment réalise
t-on un jpeg qui s'affiche dans un brouteur d'abord dégueu puis qui
progressivement s'améliore ? (fabrication en php s'entend)
Là les jpeg uploadés lourds (150 à 250ko) s'affichent chez moi en baissé
de rideau.

C'est mieux une classe ?
Faut que je pense à me renseigner alors.
Une piste ?



J'avais commencé à en coder une, mais il faudrait que je l'achève enfin :)

Tu peux peut-être regarder du côté de
<http://mambo-developer.org/api/nav.html?mambots/editors/mostlyce/jscripts/tiny_mce/imagemanager/Classes/ImageManager.php.html>



Boudiou!
Tu m'envoies direct sur du super ardu sans aucun ménagement
là dis donc!
Déjà l'autre m'a creuvé avec ses pixels métamorphosés en DPI
alors ici ... yè souis perdousse de perdosso. keskilmveulent?

J'y vois : "thumbnail directory"
qu'est-ce que c'est ça une "vignette" de répertoire ?

pour t'inspirer.



Heu ...
Une classe c'est une espèce de bibli ?
Je me demande si ça me plait : on a déjà cinquante douze mille fonctions
en php, s'il faut en rajouter issues d'une bibli...

Le serveur te me la met en cache pour, sans nouvel appel, resservir sur
chaque page vue ?

C'est bien séparé, presque tt le php d'un bloc.



Oui, c'est effectivement facile à suivre, pour le test de fonctionnement :)



Oui, bon, ben, j'avais demandé des correctifs ;-)
C'est trop bateau pour être remanié ?
Mieux vaut-il tout mettre dans une fonction externe ?
(en attendant que je comprenne ce qu'est une classe)

Rappel : je ne comprends rien au PHP (des fois que ça aurait échappé)
Même que je suis très fier d'avoir amélioré l'affichage des vignettes en
passant par un album automatique et ses grandes vues tout en php (au
lieu du JS vite fait), pourtant ça ne pète vraiment pas haut.

Nota: normalement mon truc pour test n'est plus là.
(le fichier txt est resté)
Encore merci à ceux qui sont passés.
--
sm
Avatar
Christophe Bachmann
SAM a écrit :
Le 10/7/09 9:12 PM, CrazyCat a écrit :
SAM wrote:



Tiens, au fait, puisque tu as l'air de t'y connaitre, comment réalise
t-on un jpeg qui s'affiche dans un brouteur d'abord dégueu puis qui
progressivement s'améliore ? (fabrication en php s'entend)
Là les jpeg uploadés lourds (150 à 250ko) s'affichent chez moi en baissé
de rideau.



Ca n'a rien à voir avec PHP mais avec le .jpg lui même, qui peut être
enregistré en entrelacé ou non.

J'y vois : "thumbnail directory"
qu'est-ce que c'est ça une "vignette" de répertoire ?



Non, un répertoire de vignettes (l'anglais met les qualificateurs avant
le nom final.
--
Greetings, Salutations,
Guiraud Belissen, Château du Ciel, Drachenwald,
Chris CII, Rennes, France
Avatar
Olivier Miakinen
Le 09/10/2009 11:56, SAM a écrit :

Tiens, au fait, puisque tu as l'air de t'y connaitre, comment réalise
t-on un jpeg qui s'affiche dans un brouteur d'abord dégueu puis qui
progressivement s'améliore ? (fabrication en php s'entend)



Excellente question ! Je ne connaissais pas la réponse, mais j'ai trouvé
ceci :

<cit. http://fr.php.net/manual/fr/function.imagejpeg.php>
Note: Si vous voulez générer des images JPEG progressives, vous devez
activer l'entrelacement à l'aide de la fonction imageinterlace().
</cit.>

puis :

<cit. http://fr.php.net/manual/fr/function.imageinterlace.php>
int imageinterlace ( resource $image [, int $interlace= 0 ] )

imageinterlace() active ou désactive le bit d'entrelacement.

Si l'entrelacement est à 1 et l'image est JPEG, l'image créée sera un
JPEG progressif.
</cit.>

Là les jpeg uploadés lourds (150 à 250ko) s'affichent chez moi en baissé
de rideau.



Je ne sais pas si c'est vrai, mais ceci est alléchant :

<http://www.buvetteetudiants.com/cours/administrator/html-css/jpeg-jpg-jpe-jfif.php#jpeg-progressif>
A l'inverse du GIF et PNG, un JPEG progressif est plus léger qu'un JPEG
standard.
</>

Cordialement,
--
Olivier Miakinen
Avatar
SAM
Le 10/9/09 3:32 PM, Christophe Bachmann a écrit :
SAM a écrit :
Le 10/7/09 9:12 PM, CrazyCat a écrit :
SAM wrote:



Tiens, au fait, puisque tu as l'air de t'y connaitre, comment réalise
t-on un jpeg qui s'affiche dans un brouteur d'abord dégueu puis qui
progressivement s'améliore ? (fabrication en php s'entend)
Là les jpeg uploadés lourds (150 à 250ko) s'affichent chez moi en baissé
de rideau.



Ca n'a rien à voir avec PHP mais avec le .jpg lui même, qui peut être
enregistré en entrelacé ou non.



Donc je répettationne ma question : comment je fais ça en PHP ?
(je vois qu'Olivier y répond à la suite)

Là j'ai utilisé :
$src = imagecreatefromjpeg($img_orig);
puis redimensions :
$tmp = imagecreatetruecolor($tn_width, $tn_height);
et enfin pour enregistrer :
imagejpeg($tmp, $img_dest, 70);
(au passage j'essaie de reduire le jpg)

J'y vois : "thumbnail directory"
qu'est-ce que c'est ça une "vignette" de répertoire ?



Non, un répertoire de vignettes (l'anglais met les qualificateurs avant
le nom final.



Ha? le s de thumbnail m'aura échappé ?


--
sm
1 2