如何在android中访问JPEG COM段?

如何在android中访问JPEG COM段?,android,jpeg,Android,Jpeg,JPEG有很多标记段级别,我想读和写注释标记段级别-COM(读/写) 说明: JPEG图像具有以下结构: 在这方面, 在所有标记段级别中,我特别想编辑COM段,该段用于注释 在这个片段中,我想添加/更新/删除注释,并想检索所有注释 ios中的相同问题: 我想在ANDROID中实现这一点 如何扫描JPEG流中的COM标记,读取长度,然后读取数据。只需确保以正确的顺序获取长度字节 如何跳过具有长度(或固定长度)的其他标记 如何扫描APPn、DHT、DHQ和COM标记。读长度。并跳过除COM标记以

JPEG有很多标记段级别,我想读和写注释标记段级别-COM(读/写)

说明:

JPEG图像具有以下结构:

在这方面,

在所有标记段级别中,我特别想编辑COM段,该段用于注释

在这个片段中,我想添加/更新/删除注释,并想检索所有注释 ios中的相同问题:

我想在ANDROID中实现这一点

如何扫描JPEG流中的COM标记,读取长度,然后读取数据。只需确保以正确的顺序获取长度字节

如何跳过具有长度(或固定长度)的其他标记

如何扫描APPn、DHT、DHQ和COM标记。读长度。并跳过除COM标记以外的所有内容

希望你们能明白我的问题

希望你的帮助!!!!谢谢:-)

/*EXIF&PANORAMA XMP元数据编写器*/
IImageMetadata=null;
字符串XmpStringdata=null;
JpegImageMetadata jpegMetadata=null;
TiffImageMetadata exif=null;
TiffOutputSet exifOutputSet=null;
私有文件CopyImage(字符串sourcepath、字符串targetpath){
文件源位置=新文件(源路径);
文件targetLocation=新文件(targetpath);
InputStream in=null;
OutputStream out=null;
TiffImageMetadata exif=getExifXmpInfo(sourceLocation);
试一试{
in=新文件输入流(sourceLocation);
out=新文件输出流(targetLocation);
}catch(filenotfounde异常){
e、 printStackTrace();
}
//将位从流内复制到流外
字节[]buf=新字节[1024];
内伦;
试一试{
而((len=in.read(buf))>0){
out.write(buf,0,len);
}
}捕获(IOE异常){
e、 printStackTrace();
}
试一试{
in.close();
新ExifRewriter().updateExifMetadataLossless(targetLocation,out,exif);
out.close();
}捕获(例外e){
e、 printStackTrace();
}
返回目标定位;
}
公共TiffImageMetadata getExifXmpInfo(文件源路径){
元数据=null;
XmpStringdata=“”;
XmpStringdata=null;
/*从映像文件获取EXIF&XMP数据*/
试一试{
//进出口银行
metadata=Sanselan.getMetadata(sourcepath);
//XMP
XmpStringdata=Sanselan.getXmpXml(sourcepath);
如果(元数据==null | |!(JpegImageMetadata的元数据实例))
//注释4.3<设备中未获取元数据
返回null;
JPEG元数据=(JpegImageMetadata)元数据;
exif=jpegMetadata.getExif();
//注释4.3<设备中未获取元数据
如果(exif==null)
返回null;
其他的
返回exif;
}捕获(ImageReadException | IOException e){
e、 printStackTrace();
返回null;
}
}
在gradle中包含jar库


添加您需要的额外内容阅读注释最简单的方法是扫描JPEG流中的COM标记,读取长度,然后读取数据。只需确保以正确的顺序获取长度字节

这里唯一的困难是您需要跳过其他具有长度(或固定长度)的标记。例如,序列FFFE不能出现在压缩数据中,但可能出现在APPn标记中


因此,您需要扫描APPn、DHT、DHQ和COM标记。读长度。然后跳过COM标记。

我不想使用exif接口阅读注释,我想阅读jpeg文件注释谢谢,但我知道这个jpeg图像结构,但我不知道如何实现它?你能帮我吗?无法解析方法getXmpXml,我想这会在XP comment中添加注释,我想将它添加到文件comment中,该文件已在最新版本库中删除,我有一个旧的,工作正常。但是这段代码添加了xmp注释,我需要jpeg文件注释访问谢谢,我有一段代码,但只读取了一条注释。以下是此链接:,但在我的例子中,我想添加/更新/删除多个注释并获取所有注释。使用JPEG流,您可以插入COM市场并从中删除。要删除,只需在不复制COM标记的位置进行复制。对于插入,请在APPn标记(如果存在)之后添加COM标记。您能帮我吗??如何从jpeg文件的COM段读取字节此时您需要什么?你有JPEG扫描程序吗?您确定以正确的字节顺序写入长度吗?我已阅读完jpeg com段的所有注释,但当我尝试在该com段写入字节时,我无法写入,我认为这是因为我在错误的位置写入字节。
/* EXIF & PANORAMA XMP MetaData Writer */
    IImageMetadata metadata = null;
    String XmpStringdata = null;

    JpegImageMetadata jpegMetadata = null;
    TiffImageMetadata exif = null;
    TiffOutputSet exifOutputSet = null;

private File CopyImage(String sourcepath, String targetpath) {
    File sourceLocation = new File(sourcepath);
    File targetLocation = new File(targetpath);

    InputStream in = null;
    OutputStream out = null;

    TiffImageMetadata exif = getExifXmpInfo(sourceLocation);
    try {
        in = new FileInputStream(sourceLocation);
        out = new FileOutputStream(targetLocation);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

    // Copy the bits from instream to outstream
    byte[] buf = new byte[1024];
    int len;
    try {
        while ((len = in.read(buf)) > 0) {
            out.write(buf, 0, len);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    try {
        in.close();
        new ExifRewriter().updateExifMetadataLossless(targetLocation, out, exif);
        out.close();
    } catch (Exception e) {
        e.printStackTrace();
    }


    return targetLocation;
}



public TiffImageMetadata getExifXmpInfo(File sourcepath) {
    metadata = null;
    XmpStringdata = "";
    XmpStringdata = null;

    /* Get EXIF & XMP data from Image File */
    try {
        // EXIF
        metadata = Sanselan.getMetadata(sourcepath);

        // XMP
        XmpStringdata = Sanselan.getXmpXml(sourcepath);

        if (metadata == null || !(metadata instanceof JpegImageMetadata))
            // comment for no metadata get in 4.3 < device
            return null;

        jpegMetadata = (JpegImageMetadata) metadata;

        exif = jpegMetadata.getExif();

        // comment for no metadata get in 4.3 < device
        if (exif == null)
            return null;
        else
            return exif;

    } catch (ImageReadException | IOException e) {
        e.printStackTrace();
        return null;
    }
}