2012-07-09 61 views
1

我試圖從退出調整大小時設置圖像的元數據,屬性似乎已設置,但保存後沒有任何內容。在保存之前設置圖像元數據

我很確定我正在做一些愚蠢的任何想法。

var pi = createPropertyItem(); 

pi.Id = 40091; 
pi.Len = "SomeText".Length; 
pi.Type = 2; 
pi.Value = Encoding.UTF8.GetBytes("SomeText"); 
SrcImage.SetPropertyItem(pi); 
SrcImage.Save(@"C:\temp\withTag.jpg"); 

private PropertyItem createPropertyItem() 
{ 
    var ci = typeof (PropertyItem); 
    var o = ci.GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public , null, new Type[] {} , null); 

    return (PropertyItem)o.Invoke(null); 
} 

回答

0

那麼,經過一些測試,這工作......但只有如果屬性40091不存在於原始圖像。如果存在,它不會被取代(必須承認我不知道爲什麼)。

var image = Image.FromFile(@"C:\Tools\test.jpg"); 
var propertyItem = createPropertyItem(); 
var text = "awe" + char.MinValue;//add \0 at the end of your string 
propertyItem = createPropertyItem(); 
propertyItem.Id = 40091; 
propertyItem.Value = Encoding.Unicode.GetBytes(text);//change to Unicode 
propertyItem.Len = propertyItem.Value.Length; 
propertyItem.Type = 1;//it's not type 2 ! 
image.SetPropertyItem(propertyItem); 
image.Save(@"C:\Tools\test2.jpg"); 
+0

嗯,它不顯示在Windows資源管理器中,當我右鍵單擊在Windows資源管理器。 – RubbleFord 2012-07-09 13:58:32

+0

@RubbleFord你也許可以試試這個新版本:並不完美,但我可以在瀏覽器中看到一些東西。 – 2012-07-09 16:15:41

+0

@RaphaëlAlthaus你能看看我的問題嗎?它與圖像中的PropertyItem值的**提取**相似,而不是**設置**值。 http://stackoverflow.com/questions/13997101/why-is-my-custom-propertyitem-not-able-to-be-pulled-out-of-the-image – 2012-12-21 22:08:03