powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Назначение свойств изображению
19 сообщений из 19, страница 1 из 1
Назначение свойств изображению
    #38962020
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
У меня была задача номер 1. Назначить новой картинке свойства, которые отображаются в ее свойствах (каламбурчик-с ). Типа всяких названий камер, даты съемки и тому подобного.
Это я сделал

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Image img = Image.FromFile(name);
                List<PropertyItem> pis = img.PropertyItems.ToList<PropertyItem>();

Image imgnew = resizeImage(img,x[p],y[p]);// это функция такая самописная, которая меняет размер.
...

 foreach (PropertyItem pi in pis)
                    {
                        imgnew.SetPropertyItem(pi);
                    }



Что мне понравилось, что размеры картинки не тупо скопировались, а стали правильными.

Но тут меня обуяла гордыня и я решил некоторые свойства поменять. Например, вставить себя в авторы (все по-честному - это мои фотки), или сделать название на русском. Если получится, то можно замахнуться на теги и на комменты!

Самое лучшее что я нашел в интернете (Cлава нашему форуму! Ура!)

Чтение File Info из jpg
Из своих исследований и из этого топика я вынес следующее:

Автор хранится то ли в PropertyItem, где Id=40093 (это из топика), то ли PropertyItem, где Id=315 (это из моих исследований).

Но тут засада и выскочила.

В Win7 в проводнике можно записать автора вручную. Если так сделать, то PropertyItem с id=315 появляется.
PropertyItem c Id=40093 вообще у одной камеры есть, а у другой нет.

У меня после ручного ввода с id=315 появлялся и я ему прекрасно менял значения.

Итак, если их нет?

Казалось бы можно просто добавить в PropertyItems новый экземпляр с нужным Id, но оказалось, что у PropertyItem нет конструктора.

Я придумал "хитрый" ход. Нахожу "ненужный" экземпляр и меняю ему ему Id и свойства, но это как-то неаккуратно.
Вдруг он нужен где-то, а я его меняю?
Вдруг он когда-нибудь автоматически сбросит значения, как сбрасываются и заменяются значения размеров?

Ведь вручную PropertyItem с Id=315 как-то добавляется!!!

Так как же мне правильно увековечить свое имя в свойствах фотки?
============
Примечание
Функция resizeImage, которую я нагло спер где-то в интернете
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public static Image resizeImage(Image srcImg, int widthToUse, int heightToUse)
        {
            // create the output bitmap 
            Bitmap newBitmap = new Bitmap(widthToUse, heightToUse);

            // create a Graphics object to draw into it 
            Graphics g = Graphics.FromImage(newBitmap);
            g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;

            // draw it with the new size 
            g.DrawImage(srcImg, 0, 0, widthToUse, heightToUse);

            return newBitmap;
        }

...
Рейтинг: 0 / 0
Назначение свойств изображению
    #38962024
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
было бы не вредно ознакомиться со спецификацией EXIF

а из тулзов рекомендую exiftool
...
Рейтинг: 0 / 0
Назначение свойств изображению
    #38962030
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Изопропилбыло бы не вредно ознакомиться со спецификацией EXIF

а из тулзов рекомендую exiftool

1. Где Вы рекомендуете с ней ознакомится? Как мне поможет полное знание этого стандарта, если я не могу добавить к описанию пункт стандартными средствами C#?
2. Мне не нужны тулзы. Все нужное мне прекрасно делается в Проводнике Win 7.
...
Рейтинг: 0 / 0
Назначение свойств изображению
    #38962037
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat21. Где Вы рекомендуете с ней ознакомится?
http://www.exiv2.org/tags.html

Cat2Как мне поможет полное знание этого стандарта, если я не могу добавить к описанию пункт стандартными средствами C#?
описание стандарта позволяет осознать разницу между 315 и 40093
...
Рейтинг: 0 / 0
Назначение свойств изображению
    #38962042
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
ИзопропилCat21. Где Вы рекомендуете с ней ознакомится?
http://www.exiv2.org/tags.html

Cat2Как мне поможет полное знание этого стандарта, если я не могу добавить к описанию пункт стандартными средствами C#?
описание стандарта позволяет осознать разницу между 315 и 40093
Спасибо, осознал

А толку то, если ни 315, ни 40093 не могу программно создать
...
Рейтинг: 0 / 0
Назначение свойств изображению
    #38962048
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2А толку то, если ни 315, ни 40093 не могу программно создать
мне как-то ближе http://freeimage.sourceforge.net/index.html

c# враппер имеется
...
Рейтинг: 0 / 0
Назначение свойств изображению
    #38962056
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2,

Буквально недавно копался с PropertyItem -хозяйством по своим делам.
Посмотри, никак не поможет?

Как в .Net выкапывать свойства и значения из PropertyItems GDI+-совместимого файла?

Там под спойлером целая простыня еще из этих тагов.
...
Рейтинг: 0 / 0
Назначение свойств изображению
    #38962061
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Дмитрий77Cat2,

Буквально недавно копался с PropertyItem -хозяйством по своим делам.
Посмотри, никак не поможет?

Как в .Net выкапывать свойства и значения из PropertyItems GDI+-совместимого файла?

Там под спойлером целая простыня еще из этих тагов.
Как выкапывать я тоже нашел .


Это код не выводит ничего нужного мне со свежей фотки с камеры Nikon

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
static void Main(string[] args)
        {

            {
                Bitmap image = new Bitmap(@"C:\inetpub\wwwroot\img\zhukov - копия\DSCN0298.JPG");
                UnicodeEncoding encoding = new UnicodeEncoding();

                foreach (PropertyItem propItem in image.PropertyItems)
                {
                    switch (propItem.Id)
                    {
                        case 0x013b: //315
                            Console.WriteLine("author: " + encoding.GetString(propItem.Value));
                            break;

                        case 0x9c9b:
                            Console.WriteLine("title: " + encoding.GetString(propItem.Value));
                            break;
                        case 0x9c9c:
                            Console.WriteLine("comments: " + encoding.GetString(propItem.Value));
                            break;
                        case 0x9c9d:
                            Console.WriteLine("author2: " + encoding.GetString(propItem.Value));
                            break;
                        case 0x9c9e:
                            Console.WriteLine("keywords: " + encoding.GetString(propItem.Value));
                            break;
                        case 0x9c9f:
                            Console.WriteLine("subject: " + encoding.GetString(propItem.Value));
                            break;
                    }
                }
                Console.ReadLine();

            }
...
Рейтинг: 0 / 0
Назначение свойств изображению
    #38962064
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
ИзопропилCat2А толку то, если ни 315, ни 40093 не могу программно создать
мне как-то ближе http://freeimage.sourceforge.net/index.html

c# враппер имеется
Там под юникс. Уж ради этой мелкой задачи я его ставить не буду
...
Рейтинг: 0 / 0
Назначение свойств изображению
    #38962065
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Там под юникс. Уж ради этой мелкой задачи я его ставить не буду
неправда - есть вариант под винду в виде exe
...
Рейтинг: 0 / 0
Назначение свойств изображению
    #38962066
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилCat2Там под юникс. Уж ради этой мелкой задачи я его ставить не буду
неправда - есть вариант под винду в виде exe
это я по exiftool

dll c freeimage под винду есть с шарповым враппером - http://freeimage.sourceforge.net/download.html

а что касается никона - он может увековечить автора и в 37510 User Comment
...
Рейтинг: 0 / 0
Назначение свойств изображению
    #38962085
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
ИзопропилИзопропилпропущено...

неправда - есть вариант под винду в виде exe
это я по exiftool

dll c freeimage под винду есть с шарповым враппером - http://freeimage.sourceforge.net/download.html

а что касается никона - он может увековечить автора и в 37510 User Comment
Ну ты и задачки задаешь!
В коде freeimage слово ProprtyItem не найдено,да т вообще я плюсы давно и надежно забыл.

>>а что касается никона - он может увековечить автора и в 37510 User Comment
Не. Там тоже пусто
...
Рейтинг: 0 / 0
Назначение свойств изображению
    #38962090
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2В коде freeimage слово ProprtyItem не найдено,
а и не должно быть - за пропертиитемами скрываются просто exif данные
плюсы не нужны - там же есть сишарпная обёртка

кинь ссылку на jpeg - гляну что там внутри
...
Рейтинг: 0 / 0
Назначение свойств изображению
    #38962091
ZhV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2
Но тут меня обуяла гордыня и я решил некоторые свойства поменять. Например, вставить себя в авторы (все по-честному - это мои фотки), или сделать название на русском. Если получится, то можно замахнуться на теги и на комменты!

Самое лучшее что я нашел в интернете (Cлава нашему форуму! Ура!)

Чтение File Info из jpg
...


Рекомендую
ExifLibrary for .NET

Очень редкая фича - вытаскивать и редактировать EXIF параметры без создания bitmap.
Заодно очень полезно - довольно полная enum-спецификация EXIF-items.
Ну и главное - абсолютно открытый код без всяких внешних "волшебных" dll-врапперов.
...
Рейтинг: 0 / 0
Назначение свойств изображению
    #38962098
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Как выкапывать я тоже нашел .
Других задач передо мной к сожалению не стояло.
Все что я делал - просто сравнивал исходный файл с заданным target форматом, читая его тэги (компрессия, размер изображения, разрешение) и при несоответствии подгонял формат к заданному средствами GDI+ (Graphics то бишь).

Одно могу сказать с уверенностью. Чтобы на эту тему какие-то задачи нормально решать, .Net -доков недостаточно.
Надо читать родные GDI+ доки, искать C++ примеры, а м.б. и углубляться в спецификацию этого дела.
Меня (для моей задачи) спасло только то что были "native" - коды.
...
Рейтинг: 0 / 0
Назначение свойств изображению
    #38962102
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77а м.б. и углубляться в спецификацию этого дела.
только это и нужно
...
Рейтинг: 0 / 0
Назначение свойств изображению
    #38962251
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Проблема решена

Цитата из ПТ
Cat2H.A.M.ради интереса зашел в MSDN, ба да это прелестно:

https://msdn.microsoft.com/en-us/library/system.drawing.image.getpropertyitem.aspx

It is difficult to set property items, because the PropertyItem class has no public constructors. One way to work around this restriction is to obtain a PropertyItem by retrieving the PropertyItems property value or calling the GetPropertyItem method of an Image that already has property items. Then you can set the fields of the PropertyItem and pass it to SetPropertyItem.

Клевый API (:
кароче делаешь картинку 1х1 и ставишь там какой-нить проперти. Ложишь в ресурсы и из нее тащишь объекты PropertyItem.
Ну просто великолепно! Индусы рулят.
Спасибо, что понял за меня, так как прочитать я сам смог

Тупо так и сделал. Рисунок 1х1 в ресурсы, записал вручную ему нужные свойства, а в проге или просто вставляю или перед этим меняю значения.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
PropertyItem propertyItem = propertyItemsResource.First<PropertyItem>(w => w.Id == 270);
propertyItem.Value = Encoding.UTF8.GetBytes(String.Format("{0}. Фото {1}\0", rusTextBox.Text, i + 1));
imgnew.SetPropertyItem(propertyItem);

int[] efix = new int[] { 315, 40091, 40092, 40094 };
foreach (int ef in efix)
                    {
                        propertyItem = propertyItemsResource.First<PropertyItem>(w => w.Id == ef);
                        imgnew.SetPropertyItem(propertyItem);
                    }
...
Рейтинг: 0 / 0
Назначение свойств изображению
    #38962371
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Назначение свойств изображению
    #38963194
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
pation,

Спасибо, глянул. К счастью у меня разовая задача и мне не надо все это углубленно изучать
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Назначение свойств изображению
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]