سلام چطوری میتونم پروپرتیهای یک تصویر مثل عنوان، نوع دوربین و ... رو بخونم
Printable View
سلام چطوری میتونم پروپرتیهای یک تصویر مثل عنوان، نوع دوربین و ... رو بخونم
مشکل اینجاست UndefinedProperty
BufferedImage image = null;
try {
image = ImageIO.read(new File("d:\\tst.jpg"));
Object p=image.getProperty("description",null);
System.out.println(p);
} catch (IOException e) {
e.printStackTrace();
}
نمیدونم چیکارش کنم
کسی به این مشکل برنخورده
هیچکس نبود جواب بده؟
تابع ImageIO.read خصیصه ها (Properties) رو نمی خونه.
در نتیجه اگر اطلاعات خاصی به جز تاریخ و حجم اینا خواستید باید از کتابخونه های مخصوص اینکار مثل Imagero استفاده کنید. یه جا این کتابخونه هم معرفی کرده بودند:
https://drewnoakes.com/code/exif/
یا
https://github.com/drewnoakes/metadata-extractor/
خب من نگفتم برای حجم و تاریخ از این میتونید استفاده کنید. برای حجم و تاریخ می تونید از کد زیر استفاده کنید:
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.attribute.BasicFileAttributes;
public class App {
public static void main(String[] args) throws IOException {
Path file = new File("/path/to/file.jpg").toPath();
BasicFileAttributes attr = Files.readAttributes(file, BasicFileAttributes.class);
System.out.println("creationTime: " + attr.creationTime());
System.out.println("lastAccessTime: " + attr.lastAccessTime());
System.out.println("lastModifiedTime: " + attr.lastModifiedTime());
System.out.println("size: " + attr.size());
}
}
خب این موضوع رو که تو پست اول گفتم. برای اون اطلاعات باید از کتابخونه هایی که معرفی کردم استفاده کنید. گفته بودم "تابع ImageIO.read خصیصه ها (Properties) رو نمی خونه.".
از کتابخونه Metadata extractor استفاده کردم، کد زیر که در سایت خودشون هم معرفی شده بود رو اجرا کردم:
import com.drew.imaging.ImageMetadataReader;
import com.drew.imaging.ImageProcessingException;
import com.drew.metadata.Directory;
import com.drew.metadata.Metadata;
import com.drew.metadata.Tag;
import java.io.File;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws ImageProcessingException, IOException {
File file=new File("/path/to/file.jpg");
Metadata metadata = ImageMetadataReader.readMetadata(file);
for (Directory directory : metadata.getDirectories()) {
for (Tag tag : directory.getTags()) {
System.out.format("[%s] - %s = %s\n",
directory.getName(), tag.getTagName(), tag.getDescription());
}
if (directory.hasErrors()) {
for (String error : directory.getErrors()) {
System.err.format("ERROR: %s", error);
}
}
}
}
}
و برای یک عکس اطلاعات زیر رو خروجی داد:
[JPEG] - Compression Type = Baseline
[JPEG] - Data Precision = 8 bits
[JPEG] - Image Height = 1920 pixels
[JPEG] - Image Width = 2560 pixels
[JPEG] - Number of Components = 3
[JPEG] - Component 1 = Y component: Quantization table 0, Sampling factors 2 horiz/2 vert
[JPEG] - Component 2 = Cb component: Quantization table 1, Sampling factors 1 horiz/1 vert
[JPEG] - Component 3 = Cr component: Quantization table 1, Sampling factors 1 horiz/1 vert
[Exif IFD0] - Image Width = 2560 pixels
[Exif IFD0] - Image Height = 1920 pixels
[Exif IFD0] - Make = SAMSUNG
[Exif IFD0] - Model = GT-I8552
[Exif IFD0] - Orientation = Top, left side (Horizontal / normal)
[Exif IFD0] - X Resolution = 72 dots per inch
[Exif IFD0] - Y Resolution = 72 dots per inch
[Exif IFD0] - Resolution Unit = Inch
[Exif IFD0] - Software = I8552XXAMDB
[Exif IFD0] - Date/Time = 2015:02:24 10:13:01
[Exif IFD0] - YCbCr Positioning = Center of pixel array
[Exif SubIFD] - Exposure Time = 1/1520 sec
[Exif SubIFD] - F-Number = f/2.7
[Exif SubIFD] - Exposure Program = Aperture priority
[Exif SubIFD] - ISO Speed Ratings = 50
[Exif SubIFD] - Exif Version = 2.20
[Exif SubIFD] - Date/Time Original = 2015:02:24 10:13:01
[Exif SubIFD] - Date/Time Digitized = 2015:02:24 10:13:01
[Exif SubIFD] - Components Configuration = YCbCr
[Exif SubIFD] - Exposure Bias Value = 0 EV
[Exif SubIFD] - Max Aperture Value = f/2.7
[Exif SubIFD] - Metering Mode = Center weighted average
[Exif SubIFD] - Flash = Flash fired
[Exif SubIFD] - Focal Length = 3.4 mm
[Exif SubIFD] - User Comment = User comments
[Exif SubIFD] - FlashPix Version = 1.00
[Exif SubIFD] - Color Space = sRGB
[Exif SubIFD] - Exif Image Width = 2560 pixels
[Exif SubIFD] - Exif Image Height = 1920 pixels
[Exif SubIFD] - Exposure Mode = Auto exposure
[Exif SubIFD] - White Balance Mode = Auto white balance
[Exif SubIFD] - Scene Capture Type = Standard
[Samsung Makernote] - Maker Note Version = 1.00
[Samsung Makernote] - Device Type = Cell Phone
[Samsung Makernote] - Unknown tag (0x000c) = 0
[Samsung Makernote] - Unknown tag (0x0010) = 23/24613
[Samsung Makernote] - Unknown tag (0x0040) = 0
[Samsung Makernote] - Unknown tag (0x0050) = 1
[Samsung Makernote] - Face Detect = Off
[Interoperability] - Interoperability Index = Recommended Exif Interoperability Rules (ExifR98)
[Interoperability] - Interoperability Version = 1.00
[Exif Thumbnail] - Image Width = 320 pixels
[Exif Thumbnail] - Image Height = 240 pixels
[Exif Thumbnail] - Compression = JPEG (old-style)
[Exif Thumbnail] - Orientation = Top, left side (Horizontal / normal)
[Exif Thumbnail] - X Resolution = 72 dots per inch
[Exif Thumbnail] - Y Resolution = 72 dots per inch
[Exif Thumbnail] - Resolution Unit = Inch
[Exif Thumbnail] - Thumbnail Offset = 866 bytes
[Exif Thumbnail] - Thumbnail Length = 18151 bytes
[Huffman] - Number of Tables = 4 Huffman tables
[File] - File Name = file.jpg
[File] - File Size = 3280308 bytes
[File] - File Modified Date = Tue Feb 24 10:13:02 +03:30 2015
متشکر حل شد
مشکل از من بود، من توی تگها دنبال چیزی مثل CameraMaker میگشتم که اینجا با تگ Make اومده بود و من دقت نمیکردم