使用System.Drawing.Image进行标题编辑对我不起作用

时间:2018-01-26 03:03:03

标签: c# asp.net metadata jpeg exif

我已经创建了一些函数来编辑Jifg图像的Exif元数据,现在我可以编辑注释但是当我尝试编辑标题时它没有用,没有显示错误,我想要通过替换原始文件来保存它,这是我到目前为止创建的代码:

System.Drawing.Image image = null;
    protected void EditCommentBtn_Click(object sender, EventArgs e)
    {
        image = System.Drawing.Image.FromFile(filepath);
        PropertyItem propItem = image.PropertyItems[0];
        using (var file = System.Drawing.Image.FromFile(filepath))
        {

            propItem.Id = 0x9286; //Usercomment
            propItem.Type = 2;
            propItem.Value = System.Text.Encoding.UTF8.GetBytes("HelloWorld\0");
            propItem.Len = propItem.Value.Length;
            file.SetPropertyItem(propItem);

            PropertyItem propItem1 = file.PropertyItems[file.PropertyItems.Count() - 1];
            string newFilename = "newfilename.jpg";
            file.Save(newFilename, ImageFormat.Jpeg);
        }

    }
    protected void EditTitleBtn_Click(object sender,EventArgs e)
    {
        image = System.Drawing.Image.FromFile(filepath);
        PropertyItem propItem = image.PropertyItems[0];
        using (var file = System.Drawing.Image.FromFile(filepath))
        {
            propItem.Id = 0x0320; //Title
            propItem.Type = 2;
            propItem.Value = System.Text.Encoding.UTF8.GetBytes("testtitle\0");
            propItem.Len = propItem.Value.Length;
            file.SetPropertyItem(propItem);

            PropertyItem propitem1 = file.PropertyItems[file.PropertyItems.Count() - 1];
            string newFilename = "newfilename.jpg";
            if (File.Exists(filepath))
            {
                image.Dispose();
                File.Delete(filepath);
            }
            file.Save(newFilename, ImageFormat.Jpeg);
        }
    }

并且在保存文件时出现错误,因为我想替换我编辑过的jpeg,我试图使用File.Exits和File.Delete,但它对我没有用,这是错误的显示

  

该进程无法访问文件“文件路径”,因为它正在存在   由另一个进程使用

虽然我预先处理了图像,但我可以删除其他文件,而不是我用来检查if块中条件的文件。

<小时/> 所以现在我遇到的问题是 1.可以更改Jpeg图像标题的Exif元数据(已解决)
2.可以用编辑过的jpeg文件替换原件jpeg文件

1 个答案:

答案 0 :(得分:0)

好吧显然我找到了它对我不起作用的原因,因为我使用了错误的ID作为标题,所以无论我尝试多少次都无法更改标题。

标题的正确ID为propItem.Id = 0x010E;,其余代码与EditComment事件几乎相同,因为它们使用相同的数据类型。