Réduire poids images avant de les charger dans une page HTML

Réduire poids images avant de les charger dans une page HTML - VB/VBA/VBS - Programmation

Marsh Posté le 16-03-2016 à 22:39:10    

Bonjour, ou Bonsoir suivant l'heure,  
 
En premier lieu je joins cette image pour situe le contexte, et peut-être aussi justifier du bien-fondé de ma question.
 
Je pensais pouvoir le faire directement sur cette page. Mais comme c'est raté, je la dépose ici:
 
 http://www.cjoint.com/c/FCqqgogmqCG
 
Je charge dans un WebBrowser les fichiers contenus dans divers répertoire et supports de sauvegarde afin de gérer les doublons, grouper... Enfin plein de trucs....  
(Sur un test de 899 Fichiers dans 69 Sous-Dossiers pour un total de 1,44 Go => 2,5 secondes)  
 
Tout fonctionne comme le prouve ma p.j., mais j'ai un énorme souci que je ne parviens pas à résoudre:
Mes dossiers "Photos" contenant des Images de l'ordre de 5 Mo, une bonne partie ne se charge pas.
(Elles n'apparaissent que dans l'image de l'Usf quand je la sélectionne dans le WebBrowser)
 
Je sais les faire maigrir en transitant sur une feuille Excel. J'arrive à réduire de 5,58 Mo à 60 Ko.  
Mais cela demande plus de 2 secondes pour chaque photo  
=> Abandon du projet si pas de solution,  car ce temps est inacceptable.
 
Quelqu'un aurait-il une astuce à ce sujet?  
 
Je remercie par avance, celle ou celui qui saura m'aiguiller.
Yves


---------------
C\
Reply

Marsh Posté le 16-03-2016 à 22:39:10   

Reply

Marsh Posté le 17-03-2016 à 08:56:22    

Bonjour,
 
Regarde peut-être du côté des librairies permettant de lire directement la miniature d'une image présente dans chaque fichier JPG.
 
http://www.addictivetips.com/inter [...] ge-online/ ou http://php.net/manual/en/function.exif-read-data.php

Reply

Marsh Posté le 17-03-2016 à 10:55:11    

Soit ton serveur est assez costaud pour générer une vignette de l'image de 5 Mo et de l'afficher dans un temps acceptable, soit, il faut, à chaque fois qu'une image est ajoutée, générer automatiquement sa vignette. Ca se fait très bien avec PHP.
 
Pourquoi t'as mis ton topic dans VB/VBA/VBS alors que ton pb concerne le web :??:


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 17-03-2016 à 11:54:52    

Bonjour Chemil18, et à tous
Merci d'avoir regardé. Mais, sauf erreur, EXIF ne sait que lire.
 
A ce sujet, le code à mettre en œuvre est une vraie usine à gaz! Beurk de chez Beurk!
Sur mon image, on voit bien que je pompe les propriétés qui m'intéressent (De mémoire, 248 disponibles)
J'utilise tout simplement "GetDetailsOf" avec des variables à la "Plouc" et non MyStruffStv in MyTabDerLign pour faire pro comme beaucoup.
 
 
Private Sub Label22_Click()
With ALBUM
.ComboBox1.Clear
.ComboBox1.AddItem ALBUM.Frame2.Tag
Dim FOUILLE As Shell32.Shell 'Récupération des propriétés uu Fichier (Utile pour Potos)
Dim DIAPO As Shell32.FolderItem
Dim DOSSIER_PARENT As Shell32.Folder
Dim i As Byte
    Set FOUILLE = CreateObject("Shell.Application" )
    Set DOSSIER_PARENT = FOUILLE.Namespace(.Label26.Tag)
 
For Each DIAPO In DOSSIER_PARENT.Items
     If DIAPO = Label21.Caption Then 'Le nom du Fichier sans extension
       For i = 0 To 240
          On Error Resume Next
            If DOSSIER_PARENT.GetDetailsOf(DIAPO, i) <> "" Then
              Select Case i
              Case 1, 3, 12, 30, 31, 234, 235, 236, 237, 238, 239
               N = N + 1
                With .ComboBox1
                .AddItem DOSSIER_PARENT.GetDetailsOf(DOSSIER_PARENT.Items, i) & ": " & DOSSIER_PARENT.GetDetailsOf(DIAPO, i)
                End With
              End Select
           End If
         Next i
    End If
   Next
.ComboBox1.DropDown
End With
End Sub
 
(Je n'ai pas trouvé les balises de code)
 
Au moins, on peut facilement comprendre. Et lorsque j'aide quelqu'un, il n'y a pas besoin de trop causer. (Attention à la version de Wind. ou travailler avec les Items)
 
Ta réponse va peut-être m'être très utile, car je vais chercher du côté "Thumbnail", j'ai fait Tilt à ce mot quand j'ai lu ta page.
A ce bénéfice, j'ai trouvé cette adresse et je vais tenter d'adapter (Bien que cela ressemble beaucoup à ce que j'ai déjà essayé et doit être aussi lent)
https://msdn.microsoft.com/en-us/li [...] 10%29.aspx
 
Il est très sympa de ta part de m'avoir répondu.
Yves
 
P.S. Bonjour Rufo, je n'avais pas vu ton post.
Je vais te répondre.

Reply

Marsh Posté le 17-03-2016 à 12:12:01    

Re. Rufo,
J'ai aussi posé la question sur le Forum HTML/CSS:
 
Lis, et tu comprendras pourquoi il ne m'est pas simple de choisir le camp le plus à même de m'aider
http://forum.hardware.fr/hfr/Progr [...] m#t2277793
 
Quant à PHP, c'est pour moi un gros mot dont je ne connais pas le langage.
 
Merci pour ta remarque que je comprends totalement,
Yves


---------------
C\
Reply

Marsh Posté le 17-03-2016 à 14:37:28    

Tu peux appeler en ligne de commande un soft comme gnuplot ( https://sourceforge.net/projects/gn [...] lot/5.0.3/ ) dans ton code VB qui va réduire la taille de chaque image (ou générer une version réduite dans un nouveau fichier pour pas perdre le fichier original).


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 17-03-2016 à 17:01:34    

Merci Rufo,
Je ne vais pas me lancer vers cette idée pour ces raisons:
 
- Cette Appli étant destinée à être partagée, je me vois mal contraindre l'utilisateur à installer un exe,  d'autant qu'il n'est pas évident de pouvoir le piloter depuis Vba.
- J'ai sorti ma calculette qui est plus jeune que moi de 26 ans, mais déjà très lucide.
 
Exemple concret: J'ai 714 photos d'un séjour en Corse ventilées dans 25 Sous-Dossiers + Certains doublons sur mon NetBook, Fixe et Sauvegardes.  
(Quand on vide la mémoire d'un appareil, la numérotation repart à 0. D'où cette dispersion)
 
Avec le transfert via une page Excel, je créé un dossier parallèle recevant leur vignette ultra allégée.
714 x 2,5 secondes = ½ heure =>Le temps de se faire un chocolat chaud pain beurre au coin du feu, ou l'apéro en terrasse!)
 
Après, on peut se servir efficacement de mon application. (À noter que l'on n'en a pas besoin tous les jours)
 
Merci à tous pour votre gentillesse.  :)  
 
Yves qui aurait déjà rangé son énorme caisse de clichés, pendant ce temps à chercher midi à 14 heure!  :pfff:  
C.q.f.d.

Reply

Marsh Posté le 17-03-2016 à 17:10:25    

Le pb c'est que ta solution technique est moisie (désolé) par rapport au besoin auquel tu cherches à répondre. Et Excel n'a jamais été prévu pour faire du traitement d'image. :non:  
 
Si ton appli doit être partagée, le mieux est de faire une petite appli web en PHP, par ex, et d'utiliser une lib de PHP qui permet de réduire la taille des images. Crois-moi, pour traiter 700 photos, ça mettra bien moins de temps surtout si cette réduction est faite à chaque fois qu'une image est ajoutée dans un répertoire ou si c'est fait de manière périodique, en tâche de fond ;)
 
A noter qu'il existe des applis web en PHP gratuites qui permettent de faire des galeries de photos/vidéos. Zenphotos, par ex ( http://www.zenphoto.org/demo/page/gallery/ ) mais il en existe bien d'autres...


Message édité par rufo le 17-03-2016 à 17:11:06

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 17-03-2016 à 19:34:52    

Re Rufo...Nouvelle donne pour Info: Je garde cependant ta suggestion de PHP.
 
Je viens de triturer mon code, et je pense que cela devient jouable.
 
Test sur un Dossier de 19 Photos (63,9 Mo, soit une moyenne de 3,36 Mo l'unité)
Toutes ont leur miniature de 30 à 48 Ko exportée en 20 secondes, 33 et d'une visualisation correcte.
 
Attendre 7 minutes pour 400 Clichés me semble pas trop mal. (1seconde et peu de poussières l'unité)
Et une fois que c'est fait, c'est conservé sur le DD.
 
Voici la procédure, si quelqu'un veut s'en amuser.
 
Option Compare Text
Private Sub CommandButton1_Click()
Call SCANNER_LES_DOSSIERS ' Module classique pour dresser la liste des Fichiers d'un répertoire
' dans une ListBox triée alphabétiquement
End Sub
 
Private Sub CommandButton2_Click()
Application.ScreenUpdating = False
For i = 0 To Me.ListBox1.ListCount - 1
SON_NOM = Left(Me.ListBox1.List(i, 0), InStrRev(Me.ListBox1.List(i, 0), "." ) - 1) & "¥" & (i + 1)
'Le Yen est là pour une recherche ultérieure avec "InStrRev"
ActiveSheet.Pictures.Insert(Me.ListBox1.List(i, 2)).Select
Selection.Name = "MINIATURE" & i
Set f = ActiveSheet
Set s = f.Shapes(Selection.Name)
s.Width = 90
s.Height = 90
s.Top = 20
s.CopyPicture
f.ChartObjects.Add(0, 0, 300, 300).Chart.Paste
f.ChartObjects.Left = 30
f.ChartObjects(1).Chart.Export Filename:=SON_NOM & ".jpg"
f.Shapes(f.Shapes.Count).Delete
ActiveSheet.Shapes(ActiveSheet.Shapes.Count).Delete
Next i
OpenClipboard (0& ): EmptyClipboard: CloseClipboard
Application.ScreenUpdating = True
'Unload Me
End Sub
 
Au plaisir,
Yves

Reply

Marsh Posté le 18-03-2016 à 13:09:37    

Ce qui m'interpelle, c'est que tu t'obstines à vouloir construire des miniatures par toi même alors qu'elles sont déjà présentes dans toute image JPG !
 
Crois-tu que Windows (ou autre soft de visualisation) reconstruit à chaque fois l'aperçu pour l'afficher ? Ils se contentent de lire le bout de code qui le contient dans le fichier d'origine.
 
Je ne comprends donc pas pourquoi tu n'exploites pas cette piste pour les afficher dans ton appli ... :??:  
 
Mais si tu as trouvé ton bonheur, tant mieux ! :jap:

Reply

Marsh Posté le 18-03-2016 à 13:09:37   

Reply

Marsh Posté le 18-03-2016 à 14:06:41    

Bonjour Chelmi18  :jap: , et à tous,
 
Je comprends que tu ne comprennes pas, et te remercie d'insister sur le bien-fondé de l'utilisation d'EXIF.
Cependant je reconnais qu'à titre personnel il me serait plus utile que ma bidouille.
 
Mais, comme je l'ai précisé, je me refuse à contrainte un autre utilisateur d'importer la dll idoine dans le répertoire ..........  
 
Zut! .... En écrivant ceci, je viens de m'apercevoir qu'il s'agit bien du répertoire de l'application.
 
Je vais donc étudier l'affaire de plus près, en espérant être capable de rédiger les procédures Vba permettant de l'utiliser.  
Il est fort probable que je doive encore appeler à l'aide, car j'ai peur que cela dépasse mes connaissances.
 
Merci pour ce coup de pied au Cul, comme dans La vente aux enchères de Gilbert Bécaud.  ;)  

Reply

Marsh Posté le 18-03-2016 à 18:54:40    

Re à tous, en espérant ne pas trop envahir
 
Le résultat de la motivation de Chelmi18 a porté des fruits qui me satisfont:
 
714 Photos réduites en miniatures de 52 à 61 Ko en 3 minutes ½,  
et tout en conservant leurs propriétés comme le prouve l'image de mon Usf jointe:  
(Le WebBrowser est, lui, complet en moins de 2 secondes)
 
http://www.cjoint.com/c/FCsrJbM0uE5
 
A noter que les noms sur la page seront rectifiés et l'image de l'Usf sera l'originale.(Chantier en cours)
J'utilise la Dll "Wiaaut" qui est sur toutes les dernières versions de Windows,
 et qui sélectionnée dans les référence du projet apparaitra sous le nom:
 "Microsoft Windows Image Acquisition" (Elle est dans le system32 ou SysWOW64 en 64 bits)
 

Voici le code complet:

 
Suite aux réactions:
Effacé pour ne pas faire de concurrence déloyale

Bye
 
Plus simple tu meurs! ...... N'est-il pas?  
 
Les logiciels spécifiques vont certainement plus vite que mes 3 images à la seconde, mais là, c'est moi qui pilote!!!
 
 Vos remarques et suggestions m'ont beaucoup aidé. Je vous en remercie vivement.  :)  :)  :)  
Yves


Message édité par iffif le 19-03-2016 à 18:12:21
Reply

Marsh Posté le 18-03-2016 à 22:41:41    

Si ça répond à ton besoin, c'est le principal.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed