需要添加jar:metadata-extractor-2.3.1.jar
代码:
public class ImageInfo {
private Integer id;
private String author;
private String desc;
private String date;
private String width;
private String height;
public ImageInfo(Integer id, String author, String desc,String date) {
super();
this.id = id;
this.author = author;
this.desc = desc;
this.date=date;
}
public ImageInfo(String author, String desc) {
super();
this.id = 0;
this.author = author;
this.desc = desc;
}
public ImageInfo() {
super();
// TODO Auto-generated constructor stub
}
/**
* @return the id
*/
public Integer getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(Integer id) {
this.id = id;
}
/**
* @return the author
*/
public String getAuthor() {
return author;
}
/**
* @param author the author to set
*/
public void setAuthor(String author) {
this.author = author;
}
/**
* @return the desc
*/
public String getDesc() {
return desc;
}
/**
* @param desc the desc to set
*/
public void setDesc(String desc) {
this.desc = desc;
}
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
/**
* @return the date
*/
public String getDate() {
return date;
}
/**
* @param date the date to set
*/
public void setDate(String date) {
this.date = date;
}
/**
* @return the width
*/
public String getWidth() {
return width;
}
/**
* @param width the width to set
*/
public void setWidth(String width) {
this.width = width;
}
/**
* @return the height
*/
public String getHeight() {
return height;
}
/**
* @param height the height to set
*/
public void setHeight(String height) {
this.height = height;
}
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "ImageInfo [id=" + id + ", author=" + author + ", desc=" + desc
+ ", date=" + date + ", width=" + width + ", height=" + height
+ "]";
}
}
public static void createMark(String souchFilePath, String targetFilePath,
String markContent, Color markContentColor, float qualNum,
String fontType, int fontSize) {
markContentColor = Color.red;
ImageIcon imgIcon = new ImageIcon(souchFilePath);
Image theImg = imgIcon.getImage();
// Image可以获得 输入图片的信息
int width = theImg.getWidth(null);
int height = theImg.getHeight(null);
// 800 800 为画出图片的大小
BufferedImage bimage = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
// 2d 画笔
Graphics2D g = bimage.createGraphics();
g.setColor(markContentColor);
g.setBackground(Color.white);
// 画出图片-----------------------------------
g.drawImage(theImg, 0, 0, null);
// 画出图片-----------------------------------
// --------对要显示的文字进行处理--------------
AttributedString ats = new AttributedString(markContent);
Font f = new Font(fontType, Font.BOLD, fontSize);
ats.addAttribute(TextAttribute.FONT, f, 0, markContent.length());
AttributedCharacterIterator iter = ats.getIterator();
// ----------------------
int wd = getLength(markContent) * fontSize;
g.drawString(iter, width-wd-fontSize-fontSize,
height - 40);
// 添加水印的文字和设置水印文字出现的内容 ----位置
g.dispose();// 画笔结束
try {
// 输出 文件 到指定的路径
FileOutputStream out = new FileOutputStream(targetFilePath);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bimage);
param.setQuality(qualNum, true);
encoder.encode(bimage, param);
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static int getLength(String str){
int wd = 0;
int p = 0;
int s = 0;
for (int i = 0; i < str.length(); i++){
char c = str.charAt(i);
if ((c >= 0x4e00)&&(c <= 0x9fbb)){
s++;
}else{
p++;
}
}
wd = s + p/2;
return wd;
}
public static ImageInfo getImageInfo(String filePath){
ImageInfo imageInfo = new ImageInfo();
File jpegFile = new File(filePath);
Metadata metadata = null ;
try {
metadata = JpegMetadataReader.readMetadata(jpegFile);
Directory exif = metadata.getDirectory(ExifDirectory.class);
Iterator tags = exif.getTagIterator();
while (tags.hasNext()) {
Tag tag = (Tag)tags.next();
if(tag.getTagType()==ExifDirectory.TAG_WIN_COMMENT){
imageInfo.setDesc(tag.getDescription());
}
if(tag.getTagType()==ExifDirectory.TAG_WIN_AUTHOR){
imageInfo.setAuthor(tag.getDescription());
}
if(tag.getTagType()==ExifDirectory.TAG_DATETIME){
imageInfo.setDate(tag.getDescription().substring(0,10).replace(":","."));
}
if(tag.getTagType()==ExifDirectory.TAG_EXIF_IMAGE_WIDTH){
imageInfo.setWidth(tag.getDescription().substring(0,10).split(" ")[0]);
}
if(tag.getTagType()==ExifDirectory.TAG_EXIF_IMAGE_HEIGHT){
imageInfo.setHeight(tag.getDescription().substring(0,10).split(" ")[0]);
}
}
return imageInfo;
} catch (JpegProcessingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MetadataException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public static void main(String[] args) throws Exception {
String fileName = "DSC01221.JPG";
String inFilePath = "F:/images/nice/" + fileName;
String outFilePath = "F:/" + fileName;
ImageInfo imageInfo = getImageInfo(inFilePath);
System.out.println(imageInfo.toString());
int p = Integer.parseInt(imageInfo.getWidth())/52;
System.out.println(p);
ImageUtils.createMark(inFilePath, outFilePath, imageInfo.getAuthor()+" "+imageInfo.getDesc()+" "+imageInfo.getDate(), null, 1, "",p);
}
如有疑问,欢迎加入群:283948248 找群主
分享到:
相关推荐
在Java编程语言中,获取图片的EXIF(Exchangeable Image File Format)信息是一项常见的任务,尤其是在处理图像数据或开发图像处理应用时。EXIF信息包含了拍摄照片时的各种元数据,如相机型号、拍摄时间、曝光参数、...
在实际应用中,需要注意浏览器的安全策略可能限制了读取本地文件的EXIF信息,通常需要用户通过文件输入控件选择图片,或者从可信的服务器获取图片。此外,由于EXIF信息包含敏感数据,确保在处理和存储这些信息时遵守...
使用`MetadataExtractor`,你可以轻松地读取图片文件中的EXIF元数据。以下是一个简单的示例代码,演示如何读取并打印所有EXIF标签: ```java import com.drewnoakes.metadata.exif.ExifIFD0Directory; import ...
Exif-js库的工作原理是利用HTML5的FileReader API来读取图片文件,然后解析二进制数据中的EXIF信息。由于浏览器的安全限制,JavaScript在浏览器环境中无法直接访问文件系统,因此用户通常需要通过上传图片或者在页面...
在Java编程环境中,获取相片的EXIF信息并进行自动缩放是一项常见的任务,尤其是在处理图像数据时。EXIF(Exchangeable image file format)是一种元数据标准,它存储了数码照片的各种信息,如拍摄时间、相机型号、...
为了测试这段代码,你需要有一个包含EXIF信息的图片文件。在提供的"exiftest"压缩包中,很可能包含了一张用于演示的图片。解压后,将图片路径替换到代码中的`imagePath`变量,然后运行程序,即可查看到图片的拍摄...
例如,可以使用`EXIF.getData(image)`方法获取图片数据,然后通过`EXIF.getTag(image, 'Tag Name')`获取特定的EXIF标签信息。 总的来说,"前端项目-exif-js"是一个强大的工具,让前端开发者能够充分利用图片的EXIF...
### 修改图片EXIF信息示例(使用MediaUtil) #### 一、引言 在数字图像处理领域,EXIF(Exchangeable Image File Format)是一种标准格式,用于存储图像文件中的元数据,包括拍摄时间、相机型号、光圈值、快门速度...
EXIF信息通常包含在JPEG、TIFF等图像文件中,记录了拍摄时的相机设置、时间戳、地理位置等元数据。这个库可以帮助开发者解决因图片的EXIF方向信息导致的图片显示问题。 在描述中提到的"exif.js 完整版demo"是一个...
在Java编程中,读取照片信息,特别是Exif(Exchangeable Image File Format)元数据,是一种常见的需求。Exif信息通常包含拍摄日期、时间、地理位置、相机型号、曝光参数等重要数据,对于图像处理和分析非常有用。在...
# 打开图片文件 with open('image.jpg', 'rb') as f: tags = exifread.process_file(f) # 输出所有Exif信息 for tag in tags.keys(): print(f"{tag}: {tags[tag]}") ``` 在Java中,可以使用`Apache Commons ...
2. 打开图像文件:加载包含Exif信息的图片文件到内存。 3. 读取Exif数据:调用库提供的函数或方法,读取指定的Exif标签,如"DateTimeOriginal"、"Make"、"Model"等。 4. 处理数据:将读取到的信息解析成可读格式,如...
在Java编程中,读取图片的EXIF信息是一项常见的任务,尤其对于处理摄影或图像处理相关的应用程序来说。EXIF(Exchangeable Image File Format)是一种存储在数字图像文件中元数据的格式,它提供了关于照片的各种详细...
这篇博客文章“JAVA获取图片EXIF等综合信息并转化为JSON”提供了一个实用的方法来处理这一需求。EXIF信息通常存储在JPEG和TIFF格式的图像文件中,包含了丰富的设备信息和拍摄参数。 首先,我们需要引入一个能够读取...
综上所述,Java结合Apache Commons Imaging库可以实现对图片的EXIF信息读取和保存,通过调整JPEG压缩质量实现图片压缩,并利用Java 2D API轻松添加边框。这些技术在实际项目中非常实用,帮助开发者处理和优化图片...
在Java编程中,元数据(Metadata)是指关于数据的数据,它提供有关文件、数据库记录、类、方法等的附加信息,但不直接构成这些实体的实际内容。元数据可以帮助理解和处理这些对象,例如,图片的元数据可能包含拍摄...
这主要得益于其对Blob对象和ArrayBuffer的支持,通过转换机制,用户可以轻松地获取到图片的Exif信息,甚至进行编辑后再保存。 在实际应用中,`exif-j-master_jar包`的常见用法包括: 1. **读取Exif信息**:通过...
利用exif库将gps信息写入jpg图片的例子,需要安装libexif库。 编译 gcc exif_test.c -o exif_test -lexif 运行程序后,会生成一个write-exif.jpg图片,可以使用exif 命令来查看图片的信息 ./exif_test exif ...
它也可以获取jpeg图像的大小以及嵌入在exif数据中的jpeg缩略图的大小。 它还可以提取嵌入的缩略图图像。正在安装npm install exif-parser您还可以构建浏览器包,以将其与[removed]标记一起包含在HTML文档中,如下所...