0 / 0 / 0
Регистрация: 03.02.2016
Сообщений: 15
1
.NET 4.x

Удаление exif меток из картинки

06.07.2018, 23:37. Показов 3073. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток. Вопрос состоит вот в чем: как удалить все exif метаданные из изображения? В интернете вычитал что нужно использовать System.Drawing.Imaging Но конкретно про удаление этих меток в файле я не смог нигде вычитать. Подскажите с чего начать и в какую сторону рыть. Буду рад любой полезной информации. Спасибо!
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.07.2018, 23:37
Ответы с готовыми решениями:

Считывание Exif информации картинки jpeg
Добрый день! Подскажите пожалуйста как лучше считать данные, а именно информацию GPS с Exif. На...

Считывание секунд из GPS координат при получении EXIF данных картинки
Доброго времени суток, есть код: public static GPSworker.DMS Latitude; public static...

Удаление EXIF данных
Привет, как можно удалить следующие данные (2) EXIF, в частности интересует удаление данных (1) с...

Массовое удаление меток дисков
как массово удалить метки дисков?(был Олег стал Локальный диск) желательно автоматизировано, нашел...

16
716 / 473 / 258
Регистрация: 19.12.2014
Сообщений: 1,801
07.07.2018, 03:01 2
Лучший ответ Сообщение было отмечено loverd97 как решение

Решение

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
using System;
using System.IO;
 
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            JpegPatcher JpegPatcher = new JpegPatcher();
            StreamReader sr = new StreamReader("withexif.jpg");
            StreamWriter sw = new StreamWriter("result.jpg");
            JpegPatcher.PatchAwayExif(sr.BaseStream, sw.BaseStream);
        }
    }
 
    public class JpegPatcher
    {
        public Stream PatchAwayExif(Stream inStream, Stream outStream)
        {
            byte[] jpegHeader = new byte[2];
            jpegHeader[0] = (byte)inStream.ReadByte();
            jpegHeader[1] = (byte)inStream.ReadByte();
            if (jpegHeader[0] == 0xff && jpegHeader[1] == 0xd8)
            {
                SkipExifSection(inStream);
            }
 
            outStream.WriteByte(0xff);
            outStream.WriteByte(0xd8);
 
            int readCount;
            byte[] readBuffer = new byte[4096];
            while ((readCount = inStream.Read(readBuffer, 0, readBuffer.Length)) > 0)
                outStream.Write(readBuffer, 0, readCount);
 
            return outStream;
        }
 
        private void SkipExifSection(Stream inStream)
        {
            byte[] header = new byte[2];
            header[0] = (byte)inStream.ReadByte();
            header[1] = (byte)inStream.ReadByte();
            if (header[0] == 0xff && header[1] == 0xe1)
            {
                int exifLength = inStream.ReadByte();
                exifLength = exifLength << 8;
                exifLength |= inStream.ReadByte();
 
                for (int i = 0; i < exifLength - 2; i++)
                {
                    inStream.ReadByte();
                }
            }
        }
    }
}
0
0 / 0 / 0
Регистрация: 03.02.2016
Сообщений: 15
07.07.2018, 16:06  [ТС] 3
Хочу добавить для тех кто будет пользоваться у себя этим кодом: мне потребовалось закрыть потоки для чтения и записи, иначе до закрытия программы файл открыть нельзя было, т.к. у меня не консольное приложения
0
8943 / 4855 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
07.07.2018, 16:21 4
Цитата Сообщение от loverd97 Посмотреть сообщение
мне потребовалось закрыть потоки для чтения и записи, иначе до закрытия программы файл открыть нельзя было
Это обязательно нужно делать всегда. Вне зависимости от приложения. Обычно с помощью using
0
0 / 0 / 0
Регистрация: 03.02.2016
Сообщений: 15
08.07.2018, 23:01  [ТС] 5
Закрываю все потоки, даже пишу .Dispose()
Странная штука случается, при загрузке изображения на сервер выскакивает исключение, что невозможно получить доступ т.к. файл открыт в программе. Несколько раз перепроверял все, все закрыто. Причем доступа нет у 3-4 фото, у всех остальных все нормально. Фото добавляются циклами по 2шт.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  string n_img1 = gen_name();
                JpegPatcher JpegPatcher_img1 = new JpegPatcher();
                StreamReader img_1sr = new StreamReader(image1.ImageLocation);
                StreamWriter img_1sw = new StreamWriter(Application.StartupPath + "\\cache\\" + n_img1);
                JpegPatcher_img1.PatchAwayExif(img_1sr.BaseStream, img_1sw.BaseStream);
                img_1sw.Close();
                img_1sw.Dispose();
                img_1sr.Close();
                img_1sr.Dispose();
                string n_img2 = gen_name();
                JpegPatcher JpegPatcher_img2 = new JpegPatcher();
                StreamReader img_2sr = new StreamReader(image2.ImageLocation);
                StreamWriter img_2sw = new StreamWriter(Application.StartupPath + "\\cache\\" + n_img2);
                JpegPatcher_img2.PatchAwayExif(img_2sr.BaseStream, img_2sw.BaseStream);
                img_2sw.Close();
                img_2sw.Dispose();
                img_2sr.Close();
                img_2sr.Dispose();
Ругается именно на строчку удаления файла после того как осуществляется загрузка:
C#
1
2
3
4
5
6
7
                for (int i = 0; i < suc_upl_file.Length; i++)
                {
                    file_Upload = suc_upl_file[i];
                    FTPUploadFile(file_Upload, "---", "---", "---");
                    File.Delete(file_Upload);
                    progressBar1.Value = i;
                }
Подскажите, что я делаю не правильно?

Добавлено через 3 часа 16 минут
Разобрался. Пытался в двух функциях удалить загружаемый файл.
Теперь другой вопрос - после того как удалились exif данные с фото, при загрузке файла на ftp фото не открывается... В папке с программой же все открывается. В чем может быть проблема?
0
8943 / 4855 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
09.07.2018, 00:24 6
Цитата Сообщение от loverd97 Посмотреть сообщение
при загрузке файла на ftp фото не открывается
А до удаления exif фото на ftp открывалось?
0
0 / 0 / 0
Регистрация: 03.02.2016
Сообщений: 15
09.07.2018, 00:26  [ТС] 7
Да, все нормально было
0
8943 / 4855 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
09.07.2018, 00:29 8
Открывается той же программой?
0
0 / 0 / 0
Регистрация: 03.02.2016
Сообщений: 15
09.07.2018, 00:32  [ТС] 9
Загружаются на фтп с помощью программы. На фтп доступ идет по ссылке, и в браузере все нормально открывалось. Сейчас же при доступе по ссылке файл не открывается вообще
0
8943 / 4855 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
09.07.2018, 00:35 10
loverd97, ссылка правильная? Можешь дать? Файл по ней можно скачать?
0
0 / 0 / 0
Регистрация: 03.02.2016
Сообщений: 15
09.07.2018, 00:36  [ТС] 11
Ссылка правильная, файл скачать нельзя...
0
8943 / 4855 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
09.07.2018, 00:39 12
loverd97, значит ссылка неправильная. И удаление exif тут не при чём. Проверь механизм обратной загрузки на ftp
0
0 / 0 / 0
Регистрация: 03.02.2016
Сообщений: 15
09.07.2018, 00:40  [ТС] 13
Я открываю файловый менеджер в панеле управления сайта и от туда тоже не могу открыть файл, те напрямую...
0
8943 / 4855 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
09.07.2018, 00:48 14
loverd97, чудес не бывает. Я правильно представляю порядок действий?
  1. Скачиваешь файл с сайта
  2. Убираешь exif
  3. Загружаешь файл обратно
После 1 пункта файл нормально открывается на компьютере. После 2 пункта файл нормально открывается на компьютере. После 3 пункта файл не открывается в браузере и его невозможно скачать.
Если всё так, то проблема, очевидно, в обратной загрузке файла. Может имя меняется, путь.
0
0 / 0 / 0
Регистрация: 03.02.2016
Сообщений: 15
09.07.2018, 01:02  [ТС] 15
Нет, происходит все немного иначе:
1. Файл загружается в программу
2. По нажатии на кнопку срабатывает функция удаления exif меток, затем последующая загрузка файла на ftp (размер и тд все сохраняется, просто файл почему-то не открывается на фтп)
3. Добавляется ссылка с использованием переменной в которую занесено: адрес сайта, каталога где лежит фото и непосредственно само имя файла с расширением.

До того как вставил функцию для того чтоб убрать exif метки - все работало исправно...
Причем через открытую ссылку видно что распознает как изображение, однако картинки нет, а просто битый файл (иконка битого изображения)
0
8943 / 4855 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
09.07.2018, 01:05 16
Цитата Сообщение от loverd97 Посмотреть сообщение
размер и тд все сохраняется
Размер не может сохраниться. Файл должен значительно уменьшиться. Ладно, утро вечера мудренее. Я спать.
0
0 / 0 / 0
Регистрация: 03.02.2016
Сообщений: 15
09.07.2018, 01:28  [ТС] 17
Ну размер уменьшается, не сильно, но уменьшается
В общем пока так и не разобрался с этой ситуацией, может кто сможет помочь
Может есть какой-нибудь php скрипт, который допустим по счетчику удаляет все метаданные с фото на сервере? Просто я php не очень знаю, но если кто наведет на правильную мыслю буду очень благодарен
0
09.07.2018, 01:28
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.07.2018, 01:28
Помогаю со студенческими работами здесь

Удаление серии меток с наименьшим количеством в машине Поста
Помогите, пожалуйста, с задачей. На ленте машины Поста расположены две серии меток. Написать...

Загрузка картинки на сервер по ссылке, отправка, удаление картинки
Какие есть методы, чтобы: а) Загрузить на сервер в папку ../temp картинку по ссылке (например,...

Удаление картинки
ребят подскажите пожалуйста как сделать так что бы при смене картинки удалялась старая. сейчас...

Удаление картинки с элемента
День добрый! Не могу понять,почему не получается удалить картинку с элемента с помощью...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

Новые блоги и статьи
Что такое HCL Notes и как с ним работать
InfoMaster 10.01.2025
HCL Notes (ранее известный как IBM Notes и Lotus Notes) представляет собой комплексную платформу для совместной работы и обмена информацией в корпоративной среде. Это многофункциональное решение,. . .
Как работать с Git из Windows и Visual Studio
InfoMaster 10.01.2025
Работа с Git в Windows Работа с Git в операционной системе Windows может быть осуществлена с помощью различных инструментов, каждый из которых обладает своими уникальными возможностями и. . .
Аналог оператора switch case в Python
InfoMaster 10.01.2025
Оператор switch case используется в программировании для выбора одного из нескольких вариантов исполнения кода. Однако в языке Python этот оператор отсутствует. Понимание аналогов switch case в. . .
Отличия абстрактного класса от интерфейса
InfoMaster 10.01.2025
В современной разработке программного обеспечения существуют два основных механизма реализации абстракции: абстрактные классы и интерфейсы. Эти инструменты, хотя и схожи в своей основной цели -. . .
Как работать в Git
InfoMaster 10.01.2025
Git — это одна из наиболее популярных систем контроля версий, которая активно используется разработчиками по всему миру. Она позволяет эффективно управлять изменениями в коде, координировать работу. . .
Реализация передвижения персонажа в Unity3d на C#
InfoMaster 10.01.2025
Реализация передвижения персонажа в Unity3D начинается с правильной настройки проекта. Этот этап критически важен для создания отзывчивого и плавного управления. Рассмотрим основные шаги для создания. . .
Docker: руководство для начинающих
InfoMaster 10.01.2025
В современном мире разработки программного обеспечения контейнеризация стала неотъемлемой частью процесса создания и развертывания приложений. Docker, как ведущая платформа контейнеризации, произвела. . .
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru