2017-06-01 1 views
-2

Le JPEG a beaucoup de niveaux de segment de marqueur, je veux lire et écrire le niveau de segment de marqueur de commentaire - COM (lecture/écriture).Comment puis-je accéder au segment COM JPEG dans Android?

Description:

image JPEG a la structure suivante:

http://help.accusoft.com/ImageGear/v18.1/Mac/IGDLL-10-05.html

Dans ce, http://help.accusoft.com/ImageGear/v18.1/Mac/IGDLL-10-05.html#hs-inthistopic-232092be-8c07-4ae5-9c04-6cff6a52e9f6

Dans ce tous les niveaux de segment marqueur, je veux particulièrement modifier ce segment COM, ce segment est pour les commentaires.

dans ce segment que je veux ajouter/modifier/supprimer un commentaire et que vous voulez récupérer tous les commentaires même question ios:

How can i access JPEG COM segment in iOS?

Je veux y parvenir dans Android.

comment numériser le flux JPEG pour le marqueur COM, lire la longueur, puis lire les données. Assurez-vous simplement d'obtenir la longueur des octets dans le bon ordre.

comment sauter les autres marqueurs qui ont des longueurs (ou des longueurs fixes).

comment numériser les marqueurs APPn, DHT, DHQ et COM. Lire les longueurs. Et passez tout sauf le marqueur COM.

Espérons que les gars obtiennent ma question ??

Espérons que vous nous aiderez !!!! Merci :-)

+0

https://stackoverflow.com/questions/36593739/i-want-to-read-exif-info-in-image-in-android-i-can-read-exif-from-image-in-gall –

+0

je ne veux pas lire le commentaire en utilisant l'interface exif, je veux lire le commentaire du fichier jpeg – Stack

+0

http://help.accusoft.com/ImageGear/v18.2/Windows/ActiveX/IGAX-10-12.html –

Répondre

0
/* EXIF & PANORAMA XMP MetaData Writer */ 
    IImageMetadata metadata = null; 
    String XmpStringdata = null; 

    JpegImageMetadata jpegMetadata = null; 
    TiffImageMetadata exif = null; 
    TiffOutputSet exifOutputSet = null; 

private File CopyImage(String sourcepath, String targetpath) { 
    File sourceLocation = new File(sourcepath); 
    File targetLocation = new File(targetpath); 

    InputStream in = null; 
    OutputStream out = null; 

    TiffImageMetadata exif = getExifXmpInfo(sourceLocation); 
    try { 
     in = new FileInputStream(sourceLocation); 
     out = new FileOutputStream(targetLocation); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 

    // Copy the bits from instream to outstream 
    byte[] buf = new byte[1024]; 
    int len; 
    try { 
     while ((len = in.read(buf)) > 0) { 
      out.write(buf, 0, len); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    try { 
     in.close(); 
     new ExifRewriter().updateExifMetadataLossless(targetLocation, out, exif); 
     out.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 


    return targetLocation; 
} 



public TiffImageMetadata getExifXmpInfo(File sourcepath) { 
    metadata = null; 
    XmpStringdata = ""; 
    XmpStringdata = null; 

    /* Get EXIF & XMP data from Image File */ 
    try { 
     // EXIF 
     metadata = Sanselan.getMetadata(sourcepath); 

     // XMP 
     XmpStringdata = Sanselan.getXmpXml(sourcepath); 

     if (metadata == null || !(metadata instanceof JpegImageMetadata)) 
      // comment for no metadata get in 4.3 < device 
      return null; 

     jpegMetadata = (JpegImageMetadata) metadata; 

     exif = jpegMetadata.getExif(); 

     // comment for no metadata get in 4.3 < device 
     if (exif == null) 
      return null; 
     else 
      return exif; 

    } catch (ImageReadException | IOException e) { 
     e.printStackTrace(); 
     return null; 
    } 
} 

incluent bibliothèque pot dans gradle https://github.com/fulcrumapp/sanselan-android/releases

ajouter des choses supplémentaires que vous avez besoin

+0

ne peut pas résoudre la méthode getXmpXml, et je pense que cela ajoutera un commentaire dans le commentaire XP, je veux l'ajouter dans le commentaire du fichier – Stack

+0

Cela a été retiré dans la dernière version de la bibliothèque, j'ai un ancien qui fonctionne bien. https://www.dropbox.com/home?preview=jar_sans.jar –

+0

mais ce code ajoute un commentaire xmp et je veux un accès au commentaire du fichier jpeg – Stack

0

La meilleure façon de lire le commentaire est pour analyser le flux JPEG pour le marqueur COM , lisez la longueur, puis lisez les données. Assurez-vous simplement d'obtenir la longueur des octets dans le bon ordre. La seule difficulté ici est que vous devez passer par-dessus les autres marqueurs qui ont des longueurs (ou des longueurs fixes). La séquence FFFE ne peut pas apparaître dans les données compressées mais peut se produire dans un marqueur APPn, par exemple.

Ainsi, vous devez rechercher les marqueurs APPn, DHT, DHQ et COM. Lire les longueurs. Et passez tout sauf le marqueur COM.

+0

merci, j'ai un code mais qui vient de lire un seul commentaire. suivant est le lien pour cela: http://www.java2s.com/Code/Java/2D-Graphics-GUI/GetJpegProperties.htm, mais dans mon cas, je veux ajouter/mettre à jour/supprimer plusieurs commentaires et obtenir tous les commentaires. – Stack

+0

Avec le flux JPEG, vous pouvez insérer et supprimer des marchés COM. Pour supprimer, faites juste une copie où vous ne copiez pas le marqueur COM. Pour l'insertion, ajoutez le marqueur COM après les marqueurs APPn si présents. – user3344003

+0

pouvez-vous m'aider ?? comment lire les octets du segment COM du fichier jpeg – Stack