PDA

View Full Version : مشکل اجرا شدن کد EXif در کامپیوتر مقصد



marya0030
شنبه 23 آذر 1398, 10:21 صبح
سلام خسته نباشید :قلب:

دوستان بنده یک تکه کد دارم EXIF که در کامپیوتر خودم اجرا میشه ولی در کامپیوتر دیگر اجرا نمیشه ، فکر کنم باید افزونه ای یا چیزی در کامپیوتر مقصد نصب کنم آیا؟

کار این کد اینه تاریخ ایجاد عکس رو میخونه و نمایش میده



using ExifLib;


try
{
using (var reader = new ExifLib.ExifReader(textBox10.Text))
{
DateTime dateTime;
reader.GetTagValue<DateTime>(ExifLib.ExifTags.DateTimeDigitized, out dateTime);
textbox4.Text = dateTime.ToString(CultureInfo.InvariantCulture);
}

the king
شنبه 23 آذر 1398, 19:15 عصر
سلام خسته نباشید :قلب:

دوستان بنده یک تکه کد دارم EXIF که در کامپیوتر خودم اجرا میشه ولی در کامپیوتر دیگر اجرا نمیشه ، فکر کنم باید افزونه ای یا چیزی در کامپیوتر مقصد نصب کنم آیا؟

کار این کد اینه تاریخ ایجاد عکس رو میخونه و نمایش میده



using ExifLib;


try
{
using (var reader = new ExifLib.ExifReader(textBox10.Text))
{
DateTime dateTime;
reader.GetTagValue<DateTime>(ExifLib.ExifTags.DateTimeDigitized, out dateTime);
textbox4.Text = dateTime.ToString(CultureInfo.InvariantCulture);
}




در پروژه خودتون دنبال ExifLib.dll بگردید. کنار فایل اجرایی exe برنامه تون اون فایل ExifLib.dll رو نگهدارید. روی هر سیستمی اجراش می کنید اون ExifLib.dll کنارش بمونه. اگه حذفش کنید باز نمیشه.

marya0030
شنبه 23 آذر 1398, 22:21 عصر
در پروژه خودتون دنبال ExifLib.dll بگردید. کنار فایل اجرایی exe برنامه تون اون فایل ExifLib.dll رو نگهدارید. روی هر سیستمی اجراش می کنید اون ExifLib.dll کنارش بمونه. اگه حذفش کنید باز نمیشه.


دوست عزیز با هزار بدبختی تا عیبش فهمیدم البته صددرصد مطمئن نیستم این دو عکس ببینید تفاوت در چیدمان تاریخ در عکس دومی تاریخ عکس گرفته شده اشتباه درج شده همین زمان تبدیل به شمسی مشکل بر میخوورد لطفا راهنمایی کنید



151123
151124

marya0030
شنبه 23 آذر 1398, 22:23 عصر
عکسی که من همیشه تست میکنم عکسی هست که تاریخش درست ثبت شده ولی عکسایی که در کامپیوتر مقصد هست این مشکل دارند نمیدونم چطور مشکل حل کنم کدهای تبدیل خدمتتان میزارم




try
{
using (var reader = new ExifLib.ExifReader(textBox10.Text))
{
DateTime dateTime;
reader.GetTagValue<DateTime>(ExifLib.ExifTags.DateTimeOriginal, out dateTime);
textbox4.Text = dateTime.ToString(CultureInfo.InvariantCulture);
}






//----------------------------------------------


PersianCalendar p = new PersianCalendar();
DateTime dt = Convert.ToDateTime(textbox4.Text);
int y, m, d;
y = p.GetYear(dt);
m = p.GetMonth(dt);
d = p.GetDayOfMonth(dt);
textbox4.Text = y.ToString() + "/"
+ m.ToString() + "/"
+ d.ToString();

marya0030
شنبه 23 آذر 1398, 22:29 عصر
واقعا نمیدونم مشکل از اینه یا چیز دیگر ؟؟؟؟

marya0030
شنبه 23 آذر 1398, 22:36 عصر
ببنید در عکس اول تاریخ درست به شمسی نمایش میدهد ولی در عکس دوم تاریخ به صورت زیر نمایش میدهد واقعا کلافه شدم و نمیدونم مشکل از چی هست

151125

marya0030
شنبه 23 آذر 1398, 22:47 عصر
من یک چیزی که متوجه شدم اینه که تبدیل تاریخ میلادی به شمسی را برداشتم بازم برای عکسا همین تاریخ بالا مینویسه به عبارتی این قسمت از کد که قرمز شده اجرا میکند دلیلی نمیتونم بفهمم چرا عکس اولی مشکلی ندارد ولی عکس دوم این مشکل را دارد




try
{
using (var reader = new ExifLib.ExifReader(textBox10.Text))
{
DateTime dateTime;
reader.GetTagValue<DateTime>(ExifLib.ExifTags.DateTimeOriginal, out dateTime);
textbox4.Text = dateTime.ToString(CultureInfo.InvariantCulture);




/*
PersianCalendar p = new PersianCalendar();
DateTime dt = Convert.ToDateTime(textbox4.Text);
int y, m, d;
y = p.GetYear(dt);
m = p.GetMonth(dt);
d = p.GetDayOfMonth(dt);
textbox4.Text = y.ToString() + "/"
+ m.ToString() + "/"
+ d.ToString();


*/




}


















}




catch (Exception ex)
{
}

the king
شنبه 23 آذر 1398, 23:03 عصر
دوست عزیز با هزار بدبختی تا عیبش فهمیدم البته صددرصد مطمئن نیستم این دو عکس ببینید تفاوت در چیدمان تاریخ در عکس دومی تاریخ عکس گرفته شده اشتباه درج شده همین زمان تبدیل به شمسی مشکل بر میخوورد لطفا راهنمایی کنید



151123
151124

تاریخی که در Exif ثبت میشه استاندارد داره و باید فرمت "YYYY:MM:DD HH:MM:SS" باشه، اما فرض کنیم شما تصویری دارید که YYYY:MM:DD اش YYYY:DD:MM شده.
اولا try catch فراموش نشه، ثانیا می توانیم Date رو string بخونیم و قبل از تبدیل به DateTime این مورد رو بررسی کنیم :


try
{
using (var reader = new ExifLib.ExifReader(textBox1.Text))
{
string dateTimeText;
var dateRegex = new System.Text.RegularExpressions.Regex("(?<year>\\d{4})(?<s1>[^\\d])(?<month>\\d{2})(?<s2>[^\\d])(?<day>\\d{2})");
reader.GetTagValue<string>(ExifLib.ExifTags.DateTime, out dateTimeText);
var match = dateRegex.Match(dateTimeText);
if ((match.Success))
{
if ((int.Parse(match.Groups["month"].Value) > 12) && (int.Parse(match.Groups["day"].Value) <= 12))
{
dateTimeText = dateRegex.Replace(dateTimeText, "${day}/${month}/${year}");
}
else
{
dateTimeText = dateRegex.Replace(dateTimeText, "${month}/${day}/${year}");
}
var dateTime = DateTime.Parse(dateTimeText, CultureInfo.InvariantCulture);
textBox2.Text = dateTime.ToString("yyyy/MM/dd HH:mm:ss");
}
}
}
catch (Exception ex)
{
textBox2.Text = ex.Message;
}

barnamenevisjavan
یک شنبه 24 آذر 1398, 18:45 عصر
سلام خسته نباشید :قلب:

دوستان بنده یک تکه کد دارم EXIF که در کامپیوتر خودم اجرا میشه ولی در کامپیوتر دیگر اجرا نمیشه ، فکر کنم باید افزونه ای یا چیزی در کامپیوتر مقصد نصب کنم آیا؟

کار این کد اینه تاریخ ایجاد عکس رو میخونه و نمایش میده



using ExifLib;


try
{
using (var reader = new ExifLib.ExifReader(textBox10.Text))
{
DateTime dateTime;
reader.GetTagValue<DateTime>(ExifLib.ExifTags.DateTimeDigitized, out dateTime);
textbox4.Text = dateTime.ToString(CultureInfo.InvariantCulture);
}




برای خوندن تگ ها میتونید از استاندارد خود ماکروسافت استفاده کنید پکیج ناگت زیر رو نصب کنید و براحتی باهاش کار کنید
Microsoft.WindowsAPICodePack.Shell
Microsoft.Windows.Shell
هردورو نصب کنید
نمونه کد
https://stackoverflow.com/a/37987288/11453013

marya0030
دوشنبه 25 آذر 1398, 23:12 عصر
تاریخی که در Exif ثبت میشه استاندارد داره و باید فرمت "YYYY:MM:DD HH:MM:SS" باشه، اما فرض کنیم شما تصویری دارید که YYYY:MM:DD اش YYYY:DD:MM شده.
اولا try catch فراموش نشه، ثانیا می توانیم Date رو string بخونیم و قبل از تبدیل به DateTime این مورد رو بررسی کنیم :


try
{
using (var reader = new ExifLib.ExifReader(textBox1.Text))
{
string dateTimeText;
var dateRegex = new System.Text.RegularExpressions.Regex("(?<year>\\d{4})(?<s1>[^\\d])(?<month>\\d{2})(?<s2>[^\\d])(?<day>\\d{2})");
reader.GetTagValue<string>(ExifLib.ExifTags.DateTime, out dateTimeText);
var match = dateRegex.Match(dateTimeText);
if ((match.Success))
{
if ((int.Parse(match.Groups["month"].Value) > 12) && (int.Parse(match.Groups["day"].Value) <= 12))
{
dateTimeText = dateRegex.Replace(dateTimeText, "${day}/${month}/${year}");
}
else
{
dateTimeText = dateRegex.Replace(dateTimeText, "${month}/${day}/${year}");
}
var dateTime = DateTime.Parse(dateTimeText, CultureInfo.InvariantCulture);
textBox2.Text = dateTime.ToString("yyyy/MM/dd HH:mm:ss");
}
}
}
catch (Exception ex)
{
textBox2.Text = ex.Message;
}




ببنید دوست عزیز من با کد بالا جواب نگرفتم ولی مشکل کامل فهمیدم لطفا عکس اول و دوم ببیند

عکس 1
151137

عکس 2
151138

ببیند با یک نگاه دقیق میتونید بفهمید که عکس اولی تاریخش ق . ظ و عکس دومی ب . ظ

حالا برنامه من تاریخ تمام عکس هایی که "ق . ظ " نمایش میده ولی ب .ظ با کمال شگفتی نه نشون نمیده

اینم ککدهام که صفرتا صدشو خودت زحمتش کشیدی ممنون میشم کمکم کنی




try
{
using (var reader = new ExifLib.ExifReader(textBox10.Text))
{
DateTime dateTime1;
reader.GetTagValue<DateTime>(ExifLib.ExifTags.DateTime, out dateTime1);
textbox4.Text = dateTime1.ToString(CultureInfo.InvariantCulture);
PersianCalendar p = new PersianCalendar();
DateTime dt = Convert.ToDateTime(textbox4.Text);
int y, m, d;
y = p.GetYear(dt);
m = p.GetMonth(dt);
d = p.GetDayOfMonth(dt);
textbox4.Text = y.ToString() + "/"
+ m.ToString() + "/"
+ d.ToString();
}


}


catch (Exception ex)
{
textbox4.Text = "";
}
}

marya0030
دوشنبه 25 آذر 1398, 23:19 عصر
در ضمن خدمتتان عرض کنم تاریخ شمسی همین الان کلا برداشتم حتی تاریخ قمری رو هم نمیاره

پس نتیجه میگیریم کد تبدیل تاریخ شمسی به قمری مشکی ندارد

نمیدونم چرا عکساسی که تاریخ آنها ب . ظ داره نشون نمیده :عصبانی++:

marya0030
سه شنبه 26 آذر 1398, 22:20 عصر
برای خوندن تگ ها میتونید از استاندارد خود ماکروسافت استفاده کنید پکیج ناگت زیر رو نصب کنید و براحتی باهاش کار کنید
Microsoft.WindowsAPICodePack.Shell
Microsoft.Windows.Shell
هردورو نصب کنید
نمونه کد
https://stackoverflow.com/a/37987288/11453013



دوست عزیز با این کد به هیچ نتیجه ای نرسیدم :(

the king
چهارشنبه 27 آذر 1398, 00:27 صبح
دوست عزیز با این کد به هیچ نتیجه ای نرسیدم :(

متد TryParseDateTime رو که ضمیمه می کنم امتحان کنید، AM و PM و ق.ظ و ب.ظ و ارقام فارسی هندی عربی و تقویم میلادی و شمسی و YYYY/MM/DD و DD/MM/YYYY و YYYY/DD/MM و ... رو هم پشتیبانی میکنه.
151141
پیوستش کردم چون این اسکریپت درج کد داخل فروم باگ داره و وسط عبارات فاصله اضافی میندازه و به لعنت حق نمی ارزه.


try
{
using (var reader = new ExifLib.ExifReader(textBox1.Text))
{
string dateTimeText;
reader.GetTagValue<string>(ExifLib.ExifTags.DateTime, out dateTimeText);
DateTime dateTime;
if (TryParseDateTime(dateTimeText, out dateTime))
{
textBox2.Text = dateTime.ToString("yyyy/MM/dd HH:mm:ss");
}
else
{
textBox2.Text = "Invalid Date/Time";
}
}
}
catch (Exception ex)
{
textBox2.Text = ex.Message;
}

marya0030
سه شنبه 03 دی 1398, 22:52 عصر
متد TryParseDateTime رو که ضمیمه می کنم امتحان کنید، AM و PM و ق.ظ و ب.ظ و ارقام فارسی هندی عربی و تقویم میلادی و شمسی و YYYY/MM/DD و DD/MM/YYYY و YYYY/DD/MM و ... رو هم پشتیبانی میکنه.
151141
پیوستش کردم چون این اسکریپت درج کد داخل فروم باگ داره و وسط عبارات فاصله اضافی میندازه و به لعنت حق نمی ارزه.




try
{
using (var reader = new ExifLib.ExifReader(textBox1.Text))
{
string dateTimeText;
reader.GetTagValue<string>(ExifLib.ExifTags.DateTime, out dateTimeText);
DateTime dateTime;
if (TryParseDateTime(dateTimeText, out dateTime))
{
textBox2.Text = dateTime.ToString("yyyy/MM/dd HH:mm:ss");
}
else
{
textBox2.Text = "Invalid Date/Time";
}
}
}
catch (Exception ex)
{
textBox2.Text = ex.Message;
}





تشکرررررر مشکلم حل نشد از کدهای قبلی شما استفاده کردممم :قلب:

ASHKANLAEI
چهارشنبه 04 دی 1398, 08:17 صبح
پیوستش کردم چون این اسکریپت درج کد داخل فروم باگ داره و وسط عبارات فاصله اضافی میندازه و به لعنت حق نمی ارزه.


try
{
using (var reader = new ExifLib.ExifReader(textBox1.Text))
{
string dateTimeText;
reader.GetTagValue<string>(ExifLib.ExifTags.DateTime, out dateTimeText);
DateTime dateTime;
if (TryParseDateTime(dateTimeText, out dateTime))
{
textBox2.Text = dateTime.ToString("yyyy/MM/dd HH:mm:ss");
}
else
{
textBox2.Text = "Invalid Date/Time";
}
}
}
catch (Exception ex)
{
textBox2.Text = ex.Message;
}

دوست عزیز یک بار که ویرایش کنید درست میشه برای من هم چند بار اتفاق افتاد اما با ویرایش سریع درست شد.