首页 > 编程语言 >206-java修改图片文件的元属性值TIFF_TAG_SOFTWARE等

206-java修改图片文件的元属性值TIFF_TAG_SOFTWARE等

时间:2023-11-05 23:32:38浏览次数:32  
标签:outputFile java String 206 TIFF base64 outFile File new

base64的图片转为文件

//base64的图片转为文件
String base64String = obj.getString("base64");
byte[] imageBytes = java.util.Base64.getDecoder().decode(base64String);

File outputFile = null;

File tmpPathDir = new File(tmpPath);
tmpPathDir.mkdirs();
String filePath = tmpPath+"a-"+IdUtil.simpleUUID() +".jpg";
outputFile = new File(filePath);
try (FileOutputStream fos = new FileOutputStream(filePath)) {
    fos.write(imageBytes);
}
            

使用依赖:

        <dependency>
            <groupId>com.drewnoakes</groupId>
            <artifactId>metadata-extractor</artifactId>
            <version>2.18.0</version>
        </dependency>

获取文件的Metadata,并修改,保存到新的文件:

            JpegImageMetadata metadata = (JpegImageMetadata) Imaging.getMetadata(outputFile);
            TiffImageMetadata exif = metadata.getExif();
            // 设置或更新 "Software" 属性
            TiffOutputSet outputSet = exif.getOutputSet();

            final TiffOutputDirectory rootDirectoryt=outputSet.getOrCreateRootDirectory();

            rootDirectoryt.removeField(TiffTagConstants.TIFF_TAG_SOFTWARE);
            rootDirectoryt.add(TiffTagConstants.TIFF_TAG_SOFTWARE,str2);
            //写入后,保存
            String outFileName = tmpPath+"b-"+IdUtil.simpleUUID()+".jpg";
            outFile = new File(outFileName);
            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(outFile));
            new ExifRewriter().updateExifMetadataLossless(outputFile, bos, outputSet);

从新生成的文件,读取内容:

            int length = (int) outputFile.length();
            byte[] bArr2 = new byte[length];
            DataInputStream dataInputStream = new DataInputStream(new FileInputStream(outFileName));
            dataInputStream.readFully(bArr2);
            dataInputStream.close();

从字节转为base64:

String result = Base64.getEncoder().encodeToString(bArr2);

最后,删除临时文件:

                if(outFile!=null){
                    outFile.delete();
                }
                if(outputFile!=null){
                    outputFile.delete();
                }

标签:outputFile,java,String,206,TIFF,base64,outFile,File,new
From: https://blog.51cto.com/u_14816966/8196853

相关文章

  • Java基础知识回顾1-面向对象
    一、Java特性1.面向对象众所周知,Java是一个面向对象的语言,万物皆对象。面向对象基本思想是使用对象、类、继承、封装、多态等基本概念来进行程序设计。从现实世界中客观存在的事物(即对象)出发来构造软件系统,并且在系统构造中尽可能运用人类的自然思维方式。程序就是由无数个对象和......
  • Java学习—循环语句
    1、if...else语句Java中的条件语句允许程序根据条件的不同执行不同的代码块。一个if语句包含一个布尔表达式和一条或多条语句。if语句用于测试条件。它检查布尔条件为:true或false。如果布尔表达式的值为true,则执行if语句中的代码块,否则执行else语句块后面的代码。java中有......
  • Java 基础篇day07
    面向对象三大特征之二继承权限修饰符掌握四种权限修饰符的特点和作用修饰作用范围private只能在本类中访问,其他地方不能访问缺省(包访问权限):只能在本类中或者同一个包下的其他类中protect:在本类中,同一包下的其他类中,其他包下的子孙类中(在其他包中的子类中,即要继承的类,子......
  • 在JavaScript中生成随机字符串/字符
    内容来自DOChttps://q.houxu6.top/?s=在JavaScript中生成随机字符串/字符我想要一个由随机从集合[a-zA-Z0-9]中选取的字符组成的5个字符的字符串。在JavaScript中实现这个功能的最佳方法是什么?我认为这个代码可以满足你的需求:functionmakeid(length){letresult=......
  • 请使用JavaScript比较两个日期的代码
    内容来自DOChttps://q.houxu6.top/?s=请使用JavaScript比较两个日期的代码有人能提供一种使用JavaScript比较两个日期值大于、小于和不在过去的方法吗?这些值将来自文本框。使用JavaScript比较两个日期值大于、小于和不在过去的方法如下:使用Date对象,可以为每个日期构造一个......
  • Java系列:Java8 新特性:强大的 Stream API(创建 Stream、中间操作、终止操作)
    Java8中有两大最为重要的改变。第一个是Lambda表达式;另外一个则是StreamAPI。StreamAPI(java.util.stream)把真正的函数式编程风格引入到Java中。这是目前为止对Java类库最好的补充,因为StreamAPI可以极大提供Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。......
  • java 基本数据类型和引用数据类型02
    ......
  • Java拾贝第十七天——反射之认识反射相关类
    反射相关类在Java.lang.reflect包下有类:Constructor:代表一个类中的构造方法Field:代表一个类中的属性。Method:代表一个类中的方法。反射更加的体现Java一切皆对象这个概念至此,Class类的常用方法如下:方法类型描述publicConstructor<?>[]getConstructors()throws......
  • Java之方法的基础知识
     1.方法概述1.1方法的概念方法(method)是程序中最小的执行单元注意:方法必须先创建才可以使用,该过程成为方法定义方法创建后并不是直接可以运行的,需要手动使用后,才执行,该过程成为方法调用2.方法的定义和调用2.1无参数方法定义和调用定义格式:publicstaticvoid方法名(){......
  • java实现线程的两种方式,举例说明
    在Java中,创建线程主要有两种方式:实现Runnable接口和继承Thread类。方式1:实现Runnable接口实现Runnable接口是创建线程的首选方式。你需要做的是实现Runnable接口的run方法。然后可以将Runnable对象作为参数传递给Thread对象,并启动该线程。publicclassHello......