IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Modifier le DPI d'une image


Sujet :

Langage Delphi

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2003
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 9
    Points : 7
    Points
    7
    Par défaut Modifier le DPI d'une image
    bonjour
    je souhaite choisir une image JPEG, qu'elle s'affiche dans un Timage, modifier le DPI de cette image en 300 DPI.

    Je n'ai pas d'erreurs mais l'image ne prends pas en compte la resolution 300 DPI

    Je deviens fou !!!

    Si quelqu'un peut m'aider , grand MERCI !



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    procedure TForm1.Button2Click(Sender: TObject);
    const
      BufferSize = 50;
      DPI = 1; //inch
      DPC = 2; //cm
    var
      Buffer: string;
      index: INTEGER;
      FileStream: TFileStream;
      xResolution: WORD;
      yResolution: WORD;
      JpegImage: TJpegImage;
      _type: Byte;
      StrNomFichier:string;
     
    begin
      If OpenDialog1.Execute
      then
       begin
        StrNomFichier:=(OpenDialog1.FileName);
        JpegImage := TJpegImage.Create;
     
        face.Picture.LoadFromFile(StrNomFichier);
     
        FileStream:= TFileStream.Create (OpenDialog1.FileName, fmOpenReadWrite);
     
     
        SetLength(Buffer, BufferSize);
        FileStream.Read(buffer[1], BufferSize);
        index := POS('JFIF' + #$00, buffer);
     
     
          FileStream.Seek(index + 6, soFromBeginning);
          _type := DPI;
          FileStream.write(_type, 1);
          xresolution := swap(300);
          FileStream.write(xresolution, 2);
          yresolution := swap(300);
          FileStream.write(yresolution, 2);
     
     
          JpegImage.SaveToStream(FileStream);
         // face.Picture.SaveToFile(imei.Text+'face.JPG');
     
     
        FileStream.Free;
        JpegImage.Free;
        //DeleteFile(StrNomFichier); }
      end;
     
     
    end;

  2. #2
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    Tu fais un SaveToStream sur le Stream que tu as modifié, il ne faudrait pas faire un LoadFromStream?
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2003
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 9
    Points : 7
    Points
    7
    Par défaut DPI
    Cela ne fonctionne toujours pas meme avec loadfromstream

    Pas d'erreur mais la DPI de l'image ne change pas, ça m'énerve !!

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 694
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 694
    Points : 13 130
    Points
    13 130
    Par défaut
    Sans pouvoir te donner plus d'explication, je voudrais simplement savoir l'utilité de modifier le nombre de DPI du fichier .

  5. #5
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Salut.

    Ton bout de code fonctionne, mais à UNE condition : qu'il y ait bien la chaine JFIF au début du fichier !
    Je viens de tester avec une image qui était en 96 DPI, et elle se retrouve bien en 300.
    Mais ça ne fonctionne pas pour un fichier qui commence par EXIF ! Et il y en a, surtout en provenance d'APN.

    À voir avec un éditeur hexadécimal...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  6. #6
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    Cette extension JFIF a été conçue pour ajouter des données manquantes dans les JPEG.
    La norme EXIF définit d'autres moyens d'inclure ces données.
    Le code de qfranck03 devrait éliminer les non-JFIF.

    Second point : tous les viewers JPEG ne respectent pas les résolutions, prenant alors celle standard de l'écran. C'est pê le cas du TImage, au moins dans certaines versions de Delphi ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  7. #7
    Futur Membre du Club
    Inscrit en
    Mars 2003
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 9
    Points : 7
    Points
    7
    Par défaut Utilité ?
    Tout simplement que je dois transmettre des photos à mon boulot par une application interne et cela prend uniquement celles transmises en 300 DPI !!!

  8. #8
    Futur Membre du Club
    Inscrit en
    Mars 2003
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    J'ai regardé l'image avec GIMP et toujours rien, les DPI inchangés, suis je à coté de la plaque ? ou est le schmilblic ? HELP!

  9. #9
    Futur Membre du Club
    Inscrit en
    Mars 2003
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 9
    Points : 7
    Points
    7
    Par défaut Impossible
    Est ce impossible avec DELPHI ???

  10. #10
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    Ton code fonctionne bien (en enlevant la partie en rouge évidemment, sinon on écrase le fichier modifié par l'original). (Test effectué avec un JPEG de 72 dpi passé en 300 dpi)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    rocedure TForm1.Button2Click(Sender: TObject);
    const
      BufferSize = 50;
      DPI = 1; //inch
      DPC = 2; //cm
    var
      Buffer: string;
      index: INTEGER;
      FileStream: TFileStream;
      xResolution: WORD;
      yResolution: WORD;
      JpegImage: TJpegImage;
      _type: Byte;
      StrNomFichier:string;
     
    begin
      If OpenDialog1.Execute
      then
       begin
        StrNomFichier:=(OpenDialog1.FileName);
        JpegImage := TJpegImage.Create;
     
        face.Picture.LoadFromFile(StrNomFichier);
     
        FileStream:= TFileStream.Create (OpenDialog1.FileName, fmOpenReadWrite);
     
     
        SetLength(Buffer, BufferSize);
        FileStream.Read(buffer[1], BufferSize);
        index := POS('JFIF' + #$00, buffer);
     
     
          FileStream.Seek(index + 6, soFromBeginning);
          _type := DPI;
          FileStream.write(_type, 1);
          xresolution := swap(300);
          FileStream.write(xresolution, 2);
          yresolution := swap(300);
          FileStream.write(yresolution, 2);
     
    
          //JpegImage.SaveToStream(FileStream);
     
         // face.Picture.SaveToFile(imei.Text+'face.JPG');
     
     
        FileStream.Free;
        JpegImage.Free;
        //DeleteFile(StrNomFichier); }
      end;
    end;
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  11. #11
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Salut, Linkin
    Citation Envoyé par Linkin Voir le message
    Ton code fonctionne bien (en enlevant la partie en rouge évidemment, sinon on écrase le fichier modifié par l'original). (Test effectué avec un JPEG de 72 dpi passé en 300 dpi)
    As-tu pris en compte mes remarques du 1er juin dans ton test ?
    Ton bout de code fonctionne, mais à UNE condition : qu'il y ait bien la chaine JFIF au début du fichier !
    Je viens de tester avec une image qui était en 96 DPI, et elle se retrouve bien en 300.
    Mais ça ne fonctionne pas pour un fichier qui commence par EXIF ! Et il y en a, surtout en provenance d'APN.

    À voir avec un éditeur hexadécimal...
    Car l'auteur du post cherche la string JFIF dans le fichier, et si elle n'y est pas, pâté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    index := POS('JFIF' + #$00, buffer);
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  12. #12
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    Houlà, je suis fatigué, j'avais cru comprendre que ses fichiers contenaient aussi JFIF.

    Désolé.

    Edit: Pour les EXIF, peut-être regarder du côté de CCR Exif (sur Torry).
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  13. #13
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    le format JFIF est assez simple (http://www.phidels.com/php/tutoriaux/zip/exif.zip) s'il suffit de transmettre des images JPEG sans vignette : grâce au TJpegImage, on peut charger le JPEG et l'enregistrer au format JPEG seul -> image "pure" qui commence par $FFD8 et finit par $FFD9.

    on colle une en-tête JFIF :

    $FFD8 = Start Of Image
    $FFE0 = Application 0
    $0100 = 16 octets de la section APP0 suivent son marqueur
    $4A46494600 = 'JFIF'#0
    $0102 = version 1.02
    $01 = résolution en DPI
    $012C = 300 Horizontal
    $012C = 300 Vertical
    $00 = pas de vignette ...
    $00 = ... BitMap24 à la suite

    et l'image JPEG à sa suite

    $FFD8 ... $FFD9

    et hop !
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  14. #14
    Futur Membre du Club
    Inscrit en
    Mars 2003
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 9
    Points : 7
    Points
    7
    Par défaut JFIF
    Bonjour
    merci de m'éclairer, je commence à mieux comprendre !
    Y a t-il une procédure pour ajouter une structure JFIF à un jpeg n'en contenant pas ?
    encore merci à tous !

  15. #15
    Futur Membre du Club
    Inscrit en
    Mars 2003
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 9
    Points : 7
    Points
    7
    Par défaut Pointer sur EXIF
    Peut on de la meme maniere :
    index := POS('JFIF' + #$00, buffer);

    Faire
    index := POS('EXIF' + #$00, buffer);

    mais je ne suis pas sur que #$00 soit la bonne adresse ?

    merci

  16. #16
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Bonsoir.
    Citation Envoyé par qfranck03 Voir le message
    Y a t-il une procédure pour ajouter une structure JFIF à un jpeg n'en contenant pas ?


    Perso, je chercherais plutôt à comprendre le format d'une image JPEG-EXIF, pour aller y chercher les infos qui m'intéressent, et les modifier ensuite. Surement plus facile !

    Et comme google est notre ami à tous, si tu tapes simplement "format jpeg exif", ça va te faire environ 39 500 000 pages à lire,
    Plus le lien de Tourlourou, bien sûr.

    Bon courage,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  17. #17
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Citation Envoyé par qfranck03 Voir le message
    mais je ne suis pas sur que #$00 soit la bonne adresse ?
    Mais bien sûr que non !

    As-tu bien lu ma première réponse ? Sais-tu te servir d'un éditeur hexa pour voir comment est structuré ton fichier ?
    Tout passe par là : démonter, regarder et comprendre, avec la doc qui va bien...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  18. #18
    Futur Membre du Club
    Inscrit en
    Mars 2003
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 9
    Points : 7
    Points
    7
    Par défaut format jpeg exif
    J'ai plus ou moins compris mais c'est ensuite ecrire le code pour modifier la résolution que je tourne en rond depuis pas mal de temps

Discussions similaires

  1. Modifier la source d'une image
    Par Slide dans le forum VBA PowerPoint
    Réponses: 1
    Dernier message: 12/07/2007, 16h09
  2. [c# 2.0] modifier la taille d'une image
    Par r0d dans le forum Windows Forms
    Réponses: 4
    Dernier message: 07/06/2007, 15h37
  3. modifier la transparence d'une image
    Par zidenne dans le forum Delphi
    Réponses: 5
    Dernier message: 02/11/2006, 16h55
  4. [ImageMagick] Changer le dpi d'une image
    Par gIch dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 20/02/2006, 11h42
  5. Modifier un curseur par une image
    Par daninho dans le forum Interfaces Graphiques en Java
    Réponses: 1
    Dernier message: 28/01/2006, 21h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo