Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.09.2011, 10:43   #1
DronLee
Пользователь
 
Регистрация: 08.12.2009
Сообщений: 39
Печаль Очистка метаданных

Возникла потребность очищать метаданные в Tiff-файлах. А именно: "Имя программы", "Камера, изготовитель", "Камера, модель". Нашёл 2 способа, которыми можно это сделать, но при использовании обоих способов есть кое-какие проблемы.

Начало одинаковое:

FileStream fileStream = File.Open(pathSaveFile, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
BitmapDecoder decoder = TiffBitmapDecoder.Create(fileStream , BitmapCreateOptions.PreservePixelFo rmat, BitmapCacheOption.Default);

1 способ:

BitmapFrame frame = decoder.Frames[0];
InPlaceBitmapMetadataWriter writer = frame.CreateInPlaceBitmapMetadataWr iter();
writer.SetQuery("System.Photo.Camer aManufacturer", "");
writer.SetQuery("System.Photo.Camer aModel", "");
writer.SetQuery("System.Application Name", "");
if (writer.TrySave())
{
}
else
{
}

Хорошо отрабатывает, но только если убрать строку:
writer.SetQuery("System.Application Name", "");
как только пытаюсь очистить ApplicationName, отказывается сохранять изменения.

2 способ:

BitmapMetadata metadata = ((BitmapMetadata)decoder.Frames[0].Metadata).Clone();
metadata.CameraModel = metadata.CameraManufacturer = metadata.ApplicationName = "";
BitmapFrame frame = BitmapFrame.Create(decoder.Frames[0], decoder.Frames[0].Thumbnail, metadata, decoder.Frames[0].ColorContexts);
BitmapEncoder encoder = new TiffBitmapEncoder();
((TiffBitmapEncoder)encoder).Compre ssion = TiffCompressOption.Ccitt4;
encoder.Frames.Add(frame);
FileStream fileStreamResult = File.Open(pathSaveFile, FileMode.Create, FileAccess.Write);
encoder.Save(fileStreamResult);

Здесь же всё нормально очищается, но почему-то новый полученный файл
весит больше чем исходный, заказчику это не нравится. Сжатие у них одинаковое ССITT T.6

Пожалуйста, подскажите, как очистить эти метаданные так, чтобы размер исходного файла совпадал с размером нового?
DronLee вне форума Ответить с цитированием
Старый 03.10.2011, 13:33   #2
DronLee
Пользователь
 
Регистрация: 08.12.2009
Сообщений: 39
Радость

Всё, справился Нашёл в интернете бибилиотеку taglib-sharp, с помощью которой легко решается эта проблема.
TagLib.Tiff.File tiffFile = (TagLib.Tiff.File)TagLib.Tiff.File. Create(path);
tiffFile.ImageTag.Software = "";
tiffFile.ImageTag.Model = "";
tiffFile.ImageTag.Make = "";
tiffFile.Save();
DronLee вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Очистка StringGrid dubailand Общие вопросы Delphi 2 28.08.2011 02:17
Очистка БД dbase ИВАНьКа Общие вопросы C/C++ 12 28.08.2009 12:28
очистка get Gromsky PHP 1 19.08.2009 19:15
Изменение метаданных видео (?) uprise Софт 0 14.06.2008 16:19