编程知识 cdmana.com

Utilisation de l'extracteur de métadonnées pour lire les métadonnées EXIF de l'image sur Android

*/

public class ExifTest {

public static void main(String[] args) throws Exception {

//ContientEXIFAdresse de l'image pour le message

File jpegFile = new File(“D:\XXXX\XXXX\XXXX.JPG”);

Metadata metadata = JpegMetadataReader.readMetadata(jpegFile);

Directory exif = metadata.getDirectory(ExifDirectory.class);

Iterator tags = exif.getTagIterator();

while (tags.hasNext()) {

Tag tag = (Tag)tags.next();

System.out.println(tag);

}

}

}

Exemple2:)

public static void main(String[] args) throws Exception {

File mFile = new File(“F:/XXX.JPG”);

Metadata metadata = ImageMetadataReader.readMetadata(mFile);

for (Directory directory : metadata.getDirectories()) {

if(“ExifSubIFDDirectory”.equalsIgnoreCase( directory.getClass().getSimpleName() )){

//OuvertureFValeur=La distance focale de la lentille/ Diamètre de l'ouverture de la lentille

System.out.println(“Valeur d'ouverture: f/” + directory.getString(ExifSubIFDDirectory.TAG_FNUMBER) );

System.out.println("Temps d'exposition: " + directory.getString(ExifSubIFDDirectory.TAG_EXPOSURE_TIME)+ “Secondes” );

System.out.println("ISOVitesse: " + directory.getString(ExifSubIFDDirectory.TAG_ISO_EQUIVALENT) );

System.out.println("Distance focale: " + directory.getString(ExifSubIFDDirectory.TAG_FOCAL_LENGTH) + “Mm” );

System.out.println("Heure de la photo: " + directory.getString(ExifSubIFDDirectory.TAG_DATETIME_ORIGINAL) );

System.out.println("Large: " + directory.getString(ExifSubIFDDirectory.TAG_EXIF_IMAGE_WIDTH) );

System.out.println("Élevé: " + directory.getString(ExifSubIFDDirectory.TAG_EXIF_IMAGE_HEIGHT) );

}

if(“ExifIFD0Directory”.equalsIgnoreCase( directory.getClass().getSimpleName() )){

System.out.println(" Fabricant de caméras : " + directory.getString(ExifIFD0Directory.TAG_MAKE) );

System.out.println(" Modèle de caméra : " + directory.getString(ExifIFD0Directory.TAG_MODEL) );

System.out.println("Résolution horizontale: " + directory.getString(ExifIFD0Directory.TAG_X_RESOLUTION) );

System.out.println("Résolution verticale: " + directory.getString(ExifIFD0Directory.TAG_Y_RESOLUTION) );

}

}

}

Exemple3):

File mFilePath=“C://XXX.jpg”;

Metadata metadata = com.drew.imaging.jpeg.JpegMetadataReader.readMetadata(mFilePath);

JpegDirectory jd = (JpegDirectory)metadata.getDirectory(JpegDirectory.class);

System.out.println(“------------” + jd.getImageHeight()); //Hauteur de l'image

System.out.println(“------------” + jd.getImageWidth()); //Largeur de l'image

// Parce que vous ne lisez que l'en - tête de l'image , Donc, quelle que soit la taille de l'image, elle peut être lue ,Et c'est rapide..

L'heure de prise de vue détaillée de la photo peut être vue à partir de l'exécution , Modèle de caméra pour le tournage ,Temps d'exposition,Valeur d'ouverture,Distance focale,ISOValeur Attendez un peu!.

Vous pouvez également spécifier directement la valeur de lecture de l'un de ces paramètres ,ExifDirectory? Il y a beaucoup de définitions dans la classe pour TAG_ Constante entière au début , Ces constantes représentent une valeur de paramètre spécifique , Par exemple, pour lire le modèle de caméra , Vous pouvez utiliser le code suivant pour obtenir .

Metadata metadata = JpegMetadataReader.readMetadata(jpegFile);

Directory exif = metadata.getDirectory(ExifDirectory.class);

String model = exif.getString(ExifDirectory.TAG_MODEL);

Comment obtenir les photos mentionnées ci - dessus EXIFInformation, Il contient un message important: ——Direction du tir. Par exemple, la direction de l'image utilisée est :Orientation - Top, left side (Horizontal / normal). Lorsque nous prenons des photos, nous choisissons souvent la direction de la caméra en fonction de la scène. , Comme photographier un grand arbre , On va prendre la caméra en position verticale , Faire correspondre la scène à l'ensemble du cadre , Mais l'image ainsi obtenue est inversée si elle est vue dans un navigateur d'images normal , L'angle doit être ajusté pour obtenir une image normale .

En lisant l'image EXIFInformation, Vous pouvez obtenir un tel résultat sur la direction de la prise de vue :Orientation - Left side, bottom (Rotate 270 CW).

Et lire directement ExitDirectory.TAG_ORIENTATION La valeur de l'étiquette est8.

Regardez comment cet article définit ces valeurs de retour , Ouvrez le paquet source ExifDescriptorClassegetOrientationDescription(),Le Code de la méthode est le suivant::

public String getOrientationDescription() throws MetadataException{

if (!_directory.containsTag(ExifDirectory.TAG_ORIENTATION)) return null;

int orientation = _directory.getInt(ExifDirectory.TAG_ORIENTATION);

switch (orientation) {

case 1: return “Top, left side (Horizontal / normal)”;

case 2: return “Top, right side (Mirror horizontal)”;

case 3: return “Bottom, right side (Rotate 180)”;

case 4: return “Bottom, left side (Mirror vertical)”;

case 5: return “Left side, top (Mirror horizontal and rotate 270 CW)”;

case 6: return “Right side, top (Rotate 90 CW)”;

case 7: return “Right side, bottom (Mirror horizontal and rotate 90 CW)”;

case 8: return “Left side, bottom (Rotate 270 CW)”;

default:

return String.valueOf(orientation);

}

}

De cette façon, vous pouvez voir clairement le sens de chaque valeur de retour , De cette façon, nous pouvons tourner ou miroir l'image en fonction de la valeur de retour réelle .

Voici le Code pour faire tourner l'image , D'autres choses sur le miroir d'image et ainsi de suite le lecteur peut suivre cette analogie :

String mPath = “D:\XXX.JPG”;

File img = new File(mPath);

BufferedImage old_img = (BufferedImage)ImageIO.read(img);

int w = old_img.getWidth();

int h = old_img.getHeight();

BufferedImage new_img = new BufferedImage(h,w,BufferedImage.TYPE_INT_BGR);

Graphics2D g2d =new_img.createGraphics();

AffineTransform origXform = g2d.getTransform();

AffineTransform newXform = (AffineTransform)(origXform.clone());

// center of rotation is center of the panel

double xRot = w/2.0;

newXform.rotate(Math.toRadians(270.0), xRot, xRot); //Rotation270Degré

g2d.setTransform(newXform);

// draw image centered in panel

g2d.drawImage(old_img, 0, 0, null);

// Reset to Original

g2d.setTransform(origXform);

//Écrire un nouveau fichier

FileOutputStream out = new FileOutputStream(“D:\XXX2.jpg”);

try{

ImageIO.write(new_img, “JPG”, out);

}finally{

out.close();

}

Note:: Après avoir tourné la photo avec le code ci - dessus , La photo originale contient EXIF L'information n'existe plus . Pour ce faire, vous devez d'abord tourner la photo EXIF Lecture du message , Puis écrivez une nouvelle photo après la rotation ,Peut être utilisé MediaUtil Écris. EXIF Informations dans le fichier image , Voir le dernier lien pour l'utilisation de ce paquet .

Le miroir de la photo peut être utilisé directement Graphic2D De drawImage Comment réaliser:

public abstract boolean drawImage(Image img,

int dx1,int dy1,

int dx2,int dy2,

int sx1,int sy1,

int sx2,int sy2,

ImageObserver observer);

Trois、Notes complémentaires

Enfin

J'en ai fait une copie.《AndroidNotes sur le développement des connaissances de base》,Il contient des personnalisationsViewContenu pertinent

Si vous en avez besoin,C'est bon.Croyez - moi personnellement【Niveau avancé】C'est pour toi.

AndroidLire l'image dansEXIF Métadonnées metadata-extractorUtilisation de_Android

Sauf cette note.,Partagez - le.?AndroidApprendrePDF+Vidéo de schéma+Documents d'entrevue+Notes sur le code source,Technologie architecturale avancée cerveau、AndroidÉlaboration d'un profil d'entrevue,Le contenu de ces blocs de données architecturales avancées avancées.Parfait pour les amis qui ont eu des entretiens récents et qui veulent continuer sur la voie technique.

Si vous en avez besoin, Vous pouvez cliquer sur monGitHubAccès gratuit!

AndroidLire l'image dansEXIF Métadonnées metadata-extractorUtilisation de_Développement mobile_02

Partager ces ressources,J'espère que cela vous aidera à progresser,Si vous trouvez ça utile,,Autant les recommander à vos amis.~

Comme dans cet article.,Fais - moi plaisir.、Laissez un message dans la zone de commentaires ou faites - le suivre.~

版权声明
本文为[Mb61c1dbbb44788]所创,转载请带上原文链接,感谢
https://cdmana.com/2022/01/202201150207009094.html

Scroll to Top