Запись метаданных в изображение PNG в .NET - PullRequest
5 голосов
/ 23 июля 2010

Я вижу больше, чем несколько вопросов, спрашивающих, как читать метаданные из изображения, но я не видел столько вопросов, которые спрашивают, как записать метаданные.По сути, мне нужно добавить один элемент метаданных («ImageDescription») к PNG-изображению, которое я генерирую динамически (создание растрового объекта и процедурная генерация всего содержимого в нем).

Что будет лучшимспособ добавить метаданные к изображению с помощью .NET до или сразу после записи файла на диск?

Ответы [ 2 ]

1 голос
/ 23 июля 2010

Вы можете использовать библиотеку FreeImage.NET , которая, как я считаю, может как читать, так и записывать файлы PNG, а также их метаданные.

0 голосов
/ 11 декабря 2018

Вы можете использовать BitmapMetadata из System.Windows.Media.Imaging для записи значений iTXt.Пример VB:

' Imports System.Windows.Media.Imaging
' Imports System.Windows.Media

Dim width = 256
Dim height = 256
Dim pngMetadata = New BitmapMetadata("png")

' PNG spec: http://www.libpng.org/pub/png/book/chapter11.html - Info on the iTXt chunk (and other custom metadata tags). 

pngMetadata.SetQuery("/iTXt/Keyword", "SomeKeyword".ToCharArray())
pngMetadata.SetQuery("/iTXt/TextEntry", "SomeValue")

Dim bitmap = New WriteableBitmap(width, height, 96, 96, PixelFormats.Gray8, Nothing)
Dim pixels = New Byte(width * height - 1) {}
For y = 0 To height - 1
    For x = 0 To width - 1
        pixels(y * width + x) = CByte(x)
    Next
Next

bitmap.WritePixels(New Int32Rect(0, 0, width, height), pixels, width, 0)
Dim encoder = New PngBitmapEncoder()
encoder.Frames.Add(BitmapFrame.Create(bitmap, Nothing, pngMetadata, Nothing))

Using stream = File.Create("c:\pngWithMetaData.png")
    encoder.Save(stream)
End Using
...