ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.

11.12.2008, 14:08
|
|
Участник форума
Регистрация: 25.08.2008
Сообщений: 187
Провел на форуме: 2066562
Репутация:
86
|
|
Добрый день.
У меня возникла загвоздка,а именно как на C# можно стереть все данные из картинки и записать туда свои,уточняю-нужно стереть все keywords из EXIF тега(его ID=0x9c9e) и записать туда свои которые например хранятся в массиве.
Заранее большое спасибо.
|
|
|

11.12.2008, 15:02
|
|
Banned
Регистрация: 22.12.2007
Сообщений: 660
Провел на форуме: 3885269
Репутация:
1158
|
|
Ну просматривать можно примерно так:
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
namespace Image
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
string filename = "";
Bitmap img = new Bitmap(filename);
foreach (PropertyItem imgItem in img.PropertyItems)
MessageBox.Show((Convert.ToString(img.Size)+ Convert.ToString(img.Tag)+
Convert.ToString(img.VerticalResolution)+ Convert.ToString(imgItem.Id)+
Convert.ToString(imgItem.Len)+ Convert.ToString(imgItem.Type)+
Convert.ToString(imgItem.Value)), "Свыше",
MessageBoxButtons.OK, MessageBoxIcon.Information);
//И еще много чего)))
}
}
}
Существует еще класс ImageCodecInfo.
А изменять EXIF можно так (код не мой):
Код:
private void WriteNewDescriptionInImage(string Filename,string NewDescription)
{
Image Pic;
PropertyItem[] PropertyItems;
byte[] bDescription=new Byte[NewDescription.Length];
int i;
string FilenameTemp;
Encoder Enc=Encoder.Transformation;
EncoderParameters EncParms=new EncoderParameters(1);
EncoderParameter EncParm;
ImageCodecInfo CodecInfo=GetEncoderInfo("image/jpeg");
// copy description into byte array
for (i=0;i<NewDescription.Length;i++) bDescription[i]=(byte)NewDescription[i];
// load the image to change
Pic=Image.FromFile(Filename);
// put the new description into the right property item
PropertyItems=Pic.PropertyItems;
PropertyItems[0].Id=0x010e; // 0x010e as specified in EXIF standard
PropertyItems[0].Type=2;
PropertyItems[0].Len=NewDescription.Length;
PropertyItems[0].Value=bDescription;
Pic.SetPropertyItem(PropertyItems[0]);
// we cannot store in the same image, so use a temporary image instead
FilenameTemp=Filename+".temp";
// for lossless rewriting must rotate the image by 90 degrees!
EncParm=new EncoderParameter(Enc,(long)EncoderValue.TransformRotate90);
EncParms.Param[0]=EncParm;
// now write the rotated image with new description
Pic.Save(FilenameTemp,CodecInfo,EncParms);
// for computers with low memory and large pictures: release memory now
Pic.Dispose();
Pic=null;
GC.Collect();
// delete the original file, will be replaced later
System.IO.File.Delete(Filename);
// now must rotate back the written picture
Pic=Image.FromFile(FilenameTemp);
EncParm=new EncoderParameter(Enc,(long)EncoderValue.TransformRotate270);
EncParms.Param[0]=EncParm;
Pic.Save(Filename,CodecInfo,EncParms);
// release memory now
Pic.Dispose();
Pic=null;
GC.Collect();
// delete the temporary picture
System.IO.File.Delete(FilenameTemp);
}
|
|
|

11.12.2008, 15:23
|
|
Участник форума
Регистрация: 25.08.2008
Сообщений: 187
Провел на форуме: 2066562
Репутация:
86
|
|
Большое спасибо за потраченное время.
За просмотр конечно спасибо,но он не так важен(да и в гугле полно исходников чего не скажешь про запись),постараюсь интегрировать этот код к себе,позже отпишусь что-да как.)
|
|
|

15.12.2008, 17:39
|
|
Участник форума
Регистрация: 25.08.2008
Сообщений: 187
Провел на форуме: 2066562
Репутация:
86
|
|
Возник вопрос,а именно GetEncoderInfo для его использования нужны какие-либо дополнительные библиотеки?(Я использую Visual C# 2008 express).
В поиске он мне коечто выдал насчет этой функции,но ничего полезного.
|
|
|

15.12.2008, 19:11
|
|
Участник форума
Регистрация: 07.07.2008
Сообщений: 161
Провел на форуме: 1027635
Репутация:
234
|
|
Цитата из MSDN:
Obtains an encoder that converts a sequence of Unicode characters into an ASCII encoded sequence of bytes.
Namespace: System.Text
Assembly: mscorlib (in mscorlib.dll)
поэтому пишешь в своей проге using System.Text; и радуешься =)
|
|
|

15.12.2008, 19:23
|
|
Участник форума
Регистрация: 25.08.2008
Сообщений: 187
Провел на форуме: 2066562
Репутация:
86
|
|
если бы все так было просто =/
Прописан у меня System.Text и всеравно пишет ошибку =/
|
|
|

15.12.2008, 19:52
|
|
Reservists Of Antichat - Level 6
Регистрация: 12.02.2006
Сообщений: 891
Провел на форуме: 1892597
Репутация:
836
|
|
1. Framework какой?
2. Мб переустановить фраемворки?
__________________
*********************************
*Я не волшебник ٩(๏̯͡๏)۶, только учусь...*
*********************************
Программы на заказ
Times to fly...
|
|
|

15.12.2008, 21:50
|
|
Участник форума
Регистрация: 25.08.2008
Сообщений: 187
Провел на форуме: 2066562
Репутация:
86
|
|
фреймворк 3 или 3.5 точно не знаю.
З.Ы. сижу на висте.
|
|
|

18.12.2008, 18:41
|
|
Участник форума
Регистрация: 25.08.2008
Сообщений: 187
Провел на форуме: 2066562
Репутация:
86
|
|
Проблема с exifom решена-нашел на с++ хорошую прогу)
Теперь возник другой вопрос,а именно.
Сейчас приведу пример:у меня есть ArrayList и в нем содержится скажем 200 записей,большинство из них будут повторяться.
Вот собственно и вопрос существуют ли в C# встроенные функции которые смогут:
определить общее количество повторяющихся элементов,и в дальнейшем записать их и также их количество в двумерный массив:
Код:
массив[элемент][кол.повторений]
З.Ы. в ручную написать смогу,просто интерестно есть ли такие встроенные функции в C#.
|
|
|

20.12.2008, 01:00
|
|
Познающий
Регистрация: 13.02.2007
Сообщений: 41
Провел на форуме: 137010
Репутация:
26
|
|
Сообщение от rudvil
Проблема с exifom решена-нашел на с++ хорошую прогу)
Теперь возник другой вопрос,а именно.
Сейчас приведу пример:у меня есть ArrayList и в нем содержится скажем 200 записей,большинство из них будут повторяться.
Вот собственно и вопрос существуют ли в C# встроенные функции которые смогут:
определить общее количество повторяющихся элементов,и в дальнейшем записать их и также их количество в двумерный массив:
Код:
массив[элемент][кол.повторений]
З.Ы. в ручную написать смогу,просто интерестно есть ли такие встроенные функции в C#.
нет, в core я такого не видел)
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|