`
wangcheng2008china
  • 浏览: 15158 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java获取文件exif信息-添加图片文字水印

阅读更多
需要添加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信息

    在Java编程语言中,获取图片的EXIF(Exchangeable Image File Format)信息是一项常见的任务,尤其是在处理图像数据或开发图像处理应用时。EXIF信息包含了拍摄照片时的各种元数据,如相机型号、拍摄时间、曝光参数、...

    exif-js_2.3.0_exif_信息读取_图片_

    在实际应用中,需要注意浏览器的安全策略可能限制了读取本地文件的EXIF信息,通常需要用户通过文件输入控件选择图片,或者从可信的服务器获取图片。此外,由于EXIF信息包含敏感数据,确保在处理和存储这些信息时遵守...

    java处理EXIF信息方法

    使用`MetadataExtractor`,你可以轻松地读取图片文件中的EXIF元数据。以下是一个简单的示例代码,演示如何读取并打印所有EXIF标签: ```java import com.drewnoakes.metadata.exif.ExifIFD0Directory; import ...

    exif-js分享

    Exif-js库的工作原理是利用HTML5的FileReader API来读取图片文件,然后解析二进制数据中的EXIF信息。由于浏览器的安全限制,JavaScript在浏览器环境中无法直接访问文件系统,因此用户通常需要通过上传图片或者在页面...

    java 获取相片exif信息

    在Java编程环境中,获取相片的EXIF信息并进行自动缩放是一项常见的任务,尤其是在处理图像数据时。EXIF(Exchangeable image file format)是一种元数据标准,它存储了数码照片的各种信息,如拍摄时间、相机型号、...

    java读取图片exif信息

    为了测试这段代码,你需要有一个包含EXIF信息的图片文件。在提供的"exiftest"压缩包中,很可能包含了一张用于演示的图片。解压后,将图片路径替换到代码中的`imagePath`变量,然后运行程序,即可查看到图片的拍摄...

    前端项目-exif-js.zip

    例如,可以使用`EXIF.getData(image)`方法获取图片数据,然后通过`EXIF.getTag(image, 'Tag Name')`获取特定的EXIF标签信息。 总的来说,"前端项目-exif-js"是一个强大的工具,让前端开发者能够充分利用图片的EXIF...

    修改图片exif信息示例(使用MediaUtil)

    ### 修改图片EXIF信息示例(使用MediaUtil) #### 一、引言 在数字图像处理领域,EXIF(Exchangeable Image File Format)是一种标准格式,用于存储图像文件中的元数据,包括拍摄时间、相机型号、光圈值、快门速度...

    exif-js-master.rar

    EXIF信息通常包含在JPEG、TIFF等图像文件中,记录了拍摄时的相机设置、时间戳、地理位置等元数据。这个库可以帮助开发者解决因图片的EXIF方向信息导致的图片显示问题。 在描述中提到的"exif.js 完整版demo"是一个...

    JAVA读取照片信息 exif

    在Java编程中,读取照片信息,特别是Exif(Exchangeable Image File Format)元数据,是一种常见的需求。Exif信息通常包含拍摄日期、时间、地理位置、相机型号、曝光参数等重要数据,对于图像处理和分析非常有用。在...

    获取图片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 ...

    获取照片的Exif信息

    2. 打开图像文件:加载包含Exif信息的图片文件到内存。 3. 读取Exif数据:调用库提供的函数或方法,读取指定的Exif标签,如"DateTimeOriginal"、"Make"、"Model"等。 4. 处理数据:将读取到的信息解析成可读格式,如...

    Java读取图片EXIF信息的方法

    在Java编程中,读取图片的EXIF信息是一项常见的任务,尤其对于处理摄影或图像处理相关的应用程序来说。EXIF(Exchangeable Image File Format)是一种存储在数字图像文件中元数据的格式,它提供了关于照片的各种详细...

    JAVA获取图片EXIF等综合信息并转化为JSON

    这篇博客文章“JAVA获取图片EXIF等综合信息并转化为JSON”提供了一个实用的方法来处理这一需求。EXIF信息通常存储在JPEG和TIFF格式的图像文件中,包含了丰富的设备信息和拍摄参数。 首先,我们需要引入一个能够读取...

    Java图片压缩(带EXIF信息)

    综上所述,Java结合Apache Commons Imaging库可以实现对图片的EXIF信息读取和保存,通过调整JPEG压缩质量实现图片压缩,并利用Java 2D API轻松添加边框。这些技术在实际项目中非常实用,帮助开发者处理和优化图片...

    java读取metadata元信息

    在Java编程中,元数据(Metadata)是指关于数据的数据,它提供有关文件、数据库记录、类、方法等的附加信息,但不直接构成这些实体的实际内容。元数据可以帮助理解和处理这些对象,例如,图片的元数据可能包含拍摄...

    exif-j-master_jar包_

    这主要得益于其对Blob对象和ArrayBuffer的支持,通过转换机制,用户可以轻松地获取到图片的Exif信息,甚至进行编辑后再保存。 在实际应用中,`exif-j-master_jar包`的常见用法包括: 1. **读取Exif信息**:通过...

    linux c exif gps 信息写入图片例子

    利用exif库将gps信息写入jpg图片的例子,需要安装libexif库。 编译 gcc exif_test.c -o exif_test -lexif 运行程序后,会生成一个write-exif.jpg图片,可以使用exif 命令来查看图片的信息 ./exif_test exif ...

    exif-parser:一个JavaScript库,用于在节点和浏览器中从JPEG图像提取EXIF元数据

    它也可以获取jpeg图像的大小以及嵌入在exif数据中的jpeg缩略图的大小。 它还可以提取嵌入的缩略图图像。正在安装npm install exif-parser您还可以构建浏览器包,以将其与[removed]标记一起包含在HTML文档中,如下所...

Global site tag (gtag.js) - Google Analytics