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