Clarifiration:
Как мне отредактировать и сохранить EXIF изображения / метаданные / FileInfo изображения без использования внешней DLL?
Проект:
Я создаю приложение для личного пользования, которое позволяет переименовывать, изменять метки и организовывать апокалиптическое количество изображений, размещаемых на моем личном веб-сайте. Так как я собирал забавные картинки и тому подобное в течение нескольких лет, нет никаких реальных рифм или причин для соглашений об именах файлов. Ergo, Image0001.jpg необходимо переименовать в описательное имя файла и заполнить поля метаданных.
Требуемый процесс примет существующий JPG, GIF, PNG, TIFF или BMP и сделает следующее:
- загрузить изображение в память
- конвертировать bmp файлы в jpgs, если необходимо (в основном для файлов меньшего размера)
- загрузка тегов изображения в структуру ImageData (см. Ниже)
- загрузка данных файла в структуру ImageData (где необходимо)
- отображение изображения и тегов для редактирования пользователем (в графическом окне и нескольких текстовых полях)
- разрешить редактирование полей и переименование файла
- записать изменения в файл изображения
- перейти к следующему файлу.
Пример:
- Загрузить изображение0001.jpg. Заполните поля структуры ImageData.
- Введите описание: "Lolcat потолок кот посылает сына".
- ImageData.FileName изменено на "lolcat-потолок-cat-send-son.jpg".
- ImageData.Name, .Keywords, .Title, .Subject и .Comments изменено на "lolcat потолок, кот отправляет сына".
- Сохранить файл с новым именем файла и сохранить все новые поля тегов.
(Позже я также буду использовать SQL для создания ссылочной базы данных со ссылками на онлайн-копии этих файлов, что позволит осуществлять поиск по ключевым словам, теме, имени файла и т. Д., Но это еще один слой, который намного проще, чем этот. По крайней мере, для меня.)
Проблема:
Пока что несколько дней исследований почти не дали ощутимого прогресса. Информация, по-видимому, была необъяснимым образом скрыта за кучей неожиданных поисковых ключевых слов, которые я не использовал для своих поисков. Любая помощь будет оценена.
Текущий код как:
Imports System.IO
Imports System.IO.Path
Imports System.Drawing.Imaging
Imports ImageData '(The Custom Structure below)'
'*Also has a project level reference to the dso.dll referenced below.'
Public Structure ImageData
Shared FileAuthorAuthor As String
Shared FileAuthorCategory As String
Shared FileAuthorComments As String
Shared FileAuthorCompany As String
Shared FileAuthorDateCreated As DateTime
Shared FileAuthorDescription As String
Shared FileAuthorHeight As Decimal
Shared FileAuthorHeightResolution As Decimal
Shared FileAuthorImage As Image
Shared FileAuthorKeywords As String
Shared FileAuthorName As String
Shared FileAuthorPath As String 'URL or IRL'
Shared FileAuthorRead As Boolean
Shared FileAuthorSubject As String
Shared FileAuthorTitle As String
Shared FileAuthorType As String
Shared FileAuthorWidth As Decimal
Shared FileAuthorWidthResolution As Decimal
End Structure 'ImageData
И текущий метод поиска данных:
Shared Function ReadExistingData(ByRef FileWithPath As String) As Boolean
'Extract the FileName'
Dim PathParts As String() = FileWithPath.Split("\") '"
Dim FileName As String = PathParts(PathParts.Length - 1)
Dim FileParts As String() = FileName.Split(".")
Dim FileType As String = FileParts(FileParts.Length - 1)
'Create an Image object. '
Dim SelectedImage As Bitmap = New Bitmap(FileWithPath)
'Get the File Info from the Image.'
Dim ImageFileInfo As New FileInfo(FileWithPath)
Dim dso As DSOFile.OleDocumentProperties
dso = New DSOFile.OleDocumentProperties
dso.Open(FileWithPath.Trim, True, DSOFile.dsoFileOpenOptions.dsoOptionOpenReadOnlyIfNoWriteAccess)
ImageData.FileAuthor = dso.SummaryProperties.Author '* Requires dso.DLL'
ImageData.FileCategory = dso.SummaryProperties.Category '* Requires dso.DLL'
ImageData.FileComments = dso.SummaryProperties.Comments '* Requires dso.DLL'
ImageData.FileCompany = dso.SummaryProperties.Company '* Requires dso.DLL'
ImageData.FileDateCreated = ImageFileInfo.CreationTime
ImageData.FileDescription = dso.SummaryProperties.Comments '* Requires dso.DLL.'
ImageData.FileHeight = SelectedImage.Height
ImageData.FileHeightResolution = SelectedImage.VerticalResolution
ImageData.FileImage = New Bitmap(FileWithPath)
ImageData.FileKeywords = dso.SummaryProperties.Keywords '* Requires dso.DLL'
ImageData.FileName = FileName
ImageData.FilePath = FileWithPath
ImageData.FileRead = ImageFileInfo.IsReadOnly
ImageData.FileSubject = dso.SummaryProperties.Subject '* Requires dso.DLL'
ImageData.FileTitle = dso.SummaryProperties.Title '* Requires dso.DLL'
ImageData.FileType = FileType
ImageData.FileWidth = SelectedImage.Width
ImageData.FileWidthResolution = SelectedImage.HorizontalResolution
Return True
End Function 'ReadExistingData'
Я только что просмотрел несколько поисковых запросов "Top Box":
The dso.DLL: очень полезный, но нежелательный. Требуется внешняя DLL.
[http://]www.developerfusion.com/code/5093/retrieving-the-summary-properties-of-a-file/
Неполные данные ~ Не отвечает на мои вопросы
[http://]msdn.microsoft.com/en-us/library/xddt0dz7.aspx
Требуется внешняя DLL
[http://]www.codeproject.com/KB/GDI-plus/ImageInfo.aspx
Требуется внешнее программное обеспечение
[http://]stackoverflow.com/questions/3313474/write-metadata-to-png-image-in-net
Старые данные ~ Visual Studio 2005 и .NET 2.0
[http://]www.codeproject.com/KB/graphics/MetaDataAccess.aspx
Конвертировать в BMP: Выглядит полезным
[http://]www.freevbcode.com/ShowCode.Asp?ID=5799