c# - تغيير "داتيتاكين" من الصورة




bitmap exif (2)

أبسط طريقة لقد وجدت باستخدام تكنيك وصفها هنا و System.Drawing.Bitmap.

يجب أن تكون الشفرة كما يلي:

  public void ChangeDateTaken(string path)
    {
        Image theImage = new Bitmap(path);
        PropertyItem[] propItems = theImage.PropertyItems;
        Encoding _Encoding = Encoding.UTF8;
        var DataTakenProperty1 = propItems.Where(a => a.Id.ToString("x") == "9004").FirstOrDefault();
        var DataTakenProperty2 = propItems.Where(a => a.Id.ToString("x") == "9003").FirstOrDefault();
        string originalDateString = _Encoding.GetString(DataTakenProperty1.Value);
        originalDateString = originalDateString.Remove(originalDateString.Length - 1);
        DateTime originalDate = DateTime.ParseExact(originalDateString, "yyyy:MM:dd HH:mm:ss", null);

        originalDate = originalDate.AddHours(-7);


        DataTakenProperty1.Value = _Encoding.GetBytes(originalDate.ToString("yyyy:MM:dd HH:mm:ss") + '\0');
        DataTakenProperty2.Value = _Encoding.GetBytes(originalDate.ToString("yyyy:MM:dd HH:mm:ss") + '\0');
        theImage.SetPropertyItem(DataTakenProperty1);
        theImage.SetPropertyItem(DataTakenProperty2);
        string new_path = System.IO.Path.GetDirectoryName(path) + "\\_" + System.IO.Path.GetFileName(path);
        theImage.Save(new_path);
        theImage.Dispose();
    }

لا ننسى لإضافة التجمع System.Drawing. أيضا سوف تحتاج على الأرجح إلى ضبط تنسيق داتيتيم لثقافتك، إذا لزم الأمر

لقد عدت للتو من رحلة إلى الولايات المتحدة، وبعد تحرير جميع الصور، لاحظت أن الكاميرا تستخدم المنطقة الزمنية الإسرائيلية، وليس الأمريكية. هناك 7 ساعات فرق التوقيت، لذلك انها مشكلة كبيرة بالنسبة لي. لدي 175GB من الصور، ولكن يهمني "فقط" حوالي 350 الصور. لا يمكنني تحرير إكسيف يدويا، لذلك فكرت في استخدام C #.

والفكرة هي أنه سوف يقرأ كل صورة إكسيف، والحصول على الوقت، وتعيين الوقت ناقص 7 ساعات في الصورة الأصلية. حاولت استخدام فئة الصورة، لكنه لا يعمل. حاولت استخدام بيتمابمتاديت، وأنها عملت! لقد تمكنت من الحصول على الوقت والقيام ناقص سبع ساعات، ولكن ليس لدي أي فكرة عن كيفية حفظه. كيف يمكنني فعل ذلك؟ شكر!

    public static string PhotoToBeEdited(FileInfo f)
    {
        FileStream fs = new FileStream(f.FullName, FileMode.Open, FileAccess.Read, FileShare.Read);
        BitmapSource img = BitmapFrame.Create(fs);
        BitmapMetadata md = (BitmapMetadata)img.Metadata;
        string date = md.DateTaken;
        Console.WriteLine(date);
        DateTime dt= DateTime.Parse(date);
        date = dt.AddHours(-7).ToString();

        [...]

        return date;
    }

ليس بالضبط حل البرمجة، ولكن يمكنك استخدام إكسيفتول . أنا استخدامها لهذا الغرض المحدد.

ميزة تغيير التاريخ / الوقت

هل نسيت من أي وقت مضى لتعيين التاريخ / الوقت على الكاميرا الرقمية الخاصة بك قبل اتخاذ مجموعة من الصور؟ إكسيفتول لديه ميزة التحول الوقت الذي يجعل من السهل تطبيق إصلاح دفعة إلى الطوابع الزمنية من الصور (على سبيل المثال تغيير "تاريخ الصورة أخذ" التي أبلغ عنها مستكشف ويندوز). قل على سبيل المثال أنه تم إعادة تعيين ساعة الكاميرا إلى 2000: 01: 01 00:00:00 عند وضع في بطارية جديدة في 2005: 11: 03 10:48:00. ثم كل من الصور التي أخذت لاحقا الطوابع الزمنية التي هي خاطئة من قبل 5 سنوات، 10 شهرا، 2 أيام، 10 ساعة و 48 دقيقة. لإصلاح هذا، وضع كافة الصور في نفس الدليل ("دير") وتشغيل إكسيفتول:

> exiftool "-DateTimeOriginal+=5:10:2 10:48:0" DIR

يمكنك أيضا تعيين الحقل تيميزونوفسيت ، في حال كان هناك أي وقت مضى البرمجيات التي يستخدم في الواقع.





exif