Resize un lot d'images [Résolu]

Signaler
Messages postés
460
Date d'inscription
dimanche 5 décembre 2004
Statut
Membre
Dernière intervention
6 avril 2009
-
Messages postés
460
Date d'inscription
dimanche 5 décembre 2004
Statut
Membre
Dernière intervention
6 avril 2009
-
Bonjour à toutes et à tous,

Avec un dossier de photos ayant les dimensions suivantes 2048 x 1536 est t'il possible de modifier la taille en 1024 x 768 de tous le lot en une fois.

Avec possibilité de modifier la qualité et de sauvegarder dans un autre dossier les images redimensionnées.

Beaucoup de sources en VB mais pas en Delphi il me semble.

Merci de votre attention,

@+,

Cincap

[url]mailto:/url

17 réponses

Messages postés
1725
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
11 avril 2021
8
"est t'il possible de le controler avec un TprogressBar afin de contrôler la conversion"

Ben heureusement que oui...
(sinon ça servirait à quoi, une ProgressBar ?)

Tu as au départ un nombre N de fichiers à traiter.
Tu as donc une progression P = 0, 1, 2... jusqu'à N fichiers.Dès qu'un fichier est traité, tu incrémentes P :P + 1, jusqu'à ce que P N.
Il ne te reste plus qu'à convertir ça en pourcentage d'avancement de la TProgressBar :

P  *  100
-----------   =   Pourcentage d'avancement
     N

Bonne prog'
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
37
XnView ... :)
Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
2
xnView, non  ... plutot GFL SDK si on veut rester en rapport avec Delphi  Au quel cas, il faudra utiliser gflResize. N.B. Mais il faudra toujours parcourir l'arborescence des fichiers.

Cordialement.
<hr />"L'imagination est plus importante que le savoir." Albert Einstein
Messages postés
460
Date d'inscription
dimanche 5 décembre 2004
Statut
Membre
Dernière intervention
6 avril 2009
2
Bonsoir,

@ Foxi, j'utilisais le logiciel free "Photo resize magic", mais c'était plus enrichissant de pouvoir le faire en Delphi puisque c'est une passion depuis ma prépension.

@ WhiteHippo, j'avais vu la source de Delphiprog, mais le commentaire de Pirlouis m'avait rendu perplexe puisque j'utilise comme appareil numérique le H9 de Sony qui permet la haute définition (1080) avec un 8 millions de pixels, les photos réduites doivent être de bonne qualité.

Je vais revérifier les liens proposés.

Encore merci,

@+,

Cincap

[url]mailto:/url
Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
2
Cincap,
Pour ne pas perdre en qualité, il suffit de fixer la qualité de compression avant de sauvegarder le fichier, rien de plus :
  JpegTemp.CompressionQuality:=100; // 100 = meilleure qualité, 50 = moyenne, 1 = nulle ;D
  JPegTemp.SaveToFile(FileName);

Cordialement.
<hr />"L'imagination est plus importante que le savoir." Albert Einstein
Messages postés
460
Date d'inscription
dimanche 5 décembre 2004
Statut
Membre
Dernière intervention
6 avril 2009
2
Bonjour à toutes et à tous,

@ WhiteHippo, merci pour tes conseils, pour le moment, j'obtiens une erreur à la compilation car je ne sais pas à quoi "ImgExt" correspond.

@+,

Cincap

[url]mailto:/url
Messages postés
1023
Date d'inscription
dimanche 1 août 2004
Statut
Membre
Dernière intervention
17 août 2008
2
Salut !

Attention, pour ne pas perdre en qualité, il faut non seulement mettre 100 à la propriété CompressionQuality du TJpegImage mais aussi veiller à ce que l'algorithme de redimentionnement soit optimal, ce qui n'est pas du tout le cas de StretchDraw().

Pour avoir une meilleure qualité, mieux vaut utiliser l'API StretchBlt() en Halftone. (Google sur ces deux termes pour plus d'infos).
Si tu veux une qualité impeccable, (au détriment de la vitesse de redimentionnement ^^) alors la librairie GraphicEx est faite pour toi: elle propose une procédure de redimentionnement d'images avec différents algorithmes, comme celui de Lanczos ou de Spline, qui donnent de meilleurs résultats.

De plus, cette librairie ne requiert aucune installation pour être utilisée, juste un "GraphicEx" dans les uses.

++
Flo
Messages postés
460
Date d'inscription
dimanche 5 décembre 2004
Statut
Membre
Dernière intervention
6 avril 2009
2
@ Florenth, merci de tes conseils de pro surtout en matière de traitement d'images (je l'ai souvent constaté ).

Je vais faire une recherche sur tous ces points importants.

Surtout que l'utilisation de cette application ne servira qu'à traiter un lot d'images dans un même dossier.

@+,

Cincap

[url]mailto:/url
Messages postés
1725
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
11 avril 2021
8
Salut,

"l'utilisation de cette application ne servira qu'à traiter un lot d'images dans un même dossier"

Oui mais enfin, si c'est réalisé correctement, ça met en ouvre pas mal de techniques de programmation intéressantes, en particulier pour un débutant.
Et qui peuvent être réutilisées, en particulier le parcours de répertoires avec TSearchRec et compagnie.

Concernant le redimensionnement d'images, voir également une source de Mauricio :
CREATEUR DE VIGNETTES EN HAUTE QUALITÉ
qui comporte hélas un léger bug visuel dû à une erreur dans les calculs. On attend la mise à jour avec patience.
Il est à signaler que l'utilisation de l'API StretchBlt() en Halftone citée par Florent, qui a un excellent rendu, est inopérante sous Win9x...
D'accord (encore une fois) avec Florenth pour StretchDraw() qui est très rapide mais ne peut convenir que pour une affichage avant traitement dans une série de vignettes par exemple...

Bonne prog'
Messages postés
460
Date d'inscription
dimanche 5 décembre 2004
Statut
Membre
Dernière intervention
6 avril 2009
2
@ Japee, très bonne source, je dirai même que je n'ai pas besoin de plus pour mon usage tant que maintenant.

Merci à tous ,

@+,

Cincap

[url]mailto:/url
Messages postés
1023
Date d'inscription
dimanche 1 août 2004
Statut
Membre
Dernière intervention
17 août 2008
2
@ japee: sans vouloir troller, Win9x, c'est vraiment pas le top... y'a Me, Xp et maintenant Vista (quoique je ne le recommande pas trop) alors plus d'excuses !
Messages postés
1725
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
11 avril 2021
8
@Florenth

- J'ai gardé l'habitude de vérifier mes codes sous 98SE mais je ne l'utilise plus.
- Me = 9x replâtré
- XP me va très bien, et pour l'instant rien de m'oblige à m'intéresser à Vista
- Pourvu que ça dure...
Messages postés
460
Date d'inscription
dimanche 5 décembre 2004
Statut
Membre
Dernière intervention
6 avril 2009
2
Bonsoir à toutes et à tous,

Avec le Tlistview, est t'il possible de le controler avec un TprogressBar afin de contrôler la conversion quelle que soit le nombre de photos.

J'ai essayé de l'implenter à cet endroit mais cela ne fonctionne pas.

Pb1 = TprogressBar

if DestOk
    then begin
      // Parcourir tous les fichiers dans EPathSource.Text :      Cont : FindFirst(ValiderPath(EPathSource.Text + '\*.*'), faAnyFile, SRec) 0;


      while Cont do
      begin
        if TraiterFichier
        then CONSTRUIRE_MINIATURE(SRec.Name, TypeFichier);


        Cont :FindNext(SRec) 0;

Pb1.Position := 0;
Pb1.Max := LVStatus.SelCount;
             end;
    end
    else

[url]mailto:/url
Messages postés
460
Date d'inscription
dimanche 5 décembre 2004
Statut
Membre
Dernière intervention
6 avril 2009
2
Bonjour à toutes et à tous,

@ Japee, tu passes la nuit ?

Merci pour les conseils, je vais voir comment et ou inclure cette possibilité.

@+,

Cincap

[url]mailto:/url
Messages postés
1023
Date d'inscription
dimanche 1 août 2004
Statut
Membre
Dernière intervention
17 août 2008
2
Même pas besoin de convertir en pourcentage: tu règles la propriété Min de la ProgressBar à 0 et la propriété Max au nombre de fichiers et tu incrémente la propriété Position (soir directement, soit par Stepxxx)

Cela peut donner un code du genre (SL: TStringList qui contient les fichiers - PB: TProgressBar - LblInfo: TLabel)

<hr size= "2" width="100%" /> procedure TFrmPrinc.Redimentionnement;
var
  I: Integer;
begin
  PB.Min : = 0;
  PB.Max := SL.Count - 1;
  for I : = 0 to SL.Count - 1 do
  begin
    { Mise à jour le la progressbar et du label }
    PB.Position := I;
    LblInfo.Caption := Format('Traitement du fichier %d sur %d: %s', [I + 1, SL.Count, ExtractFileName(SL[I])]);
  
    { Force la mise à jour de l'affichage } 
    Application.ProcessMessages;

    { Redimentionnement de l'image }
    // à toi d'écrire le code pour redimentionner l'image SL[I] en fonction de la méthode de redimentionnement voulue bien sûr...
  end ;

  { A la fin, on réinitialise tout }
  PB.Position : = 0;
  LblInfo.Caption := 'Terminé !';
end ;
<hr size ="2" width="100%" />
Voila ! Si tu as d'autres questions... n'hésites pas.

++
Flo
Messages postés
1023
Date d'inscription
dimanche 1 août 2004
Statut
Membre
Dernière intervention
17 août 2008
2
@Cincap: si tu mets bien la liste des fichiers à convertir dans la stringlist SL, la progresion est nickel, et tout fonctionne parfaitement.
Messages postés
460
Date d'inscription
dimanche 5 décembre 2004
Statut
Membre
Dernière intervention
6 avril 2009
2
Bonjour à toutes et à tous,

@ Florenth, tu as raison, il y quelque chôse qui m'échappe peut être je ne met pas le code à l'endroit voulu.

@ Mauricio, excellente source continues sur ta lancée.

@ tous, merci pour les heures que vous passez à répondre aux questions posées sur ce forum.
 
@+,

Cincap

[url]mailto:/url