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();
    }

सिस्टम जोड़ने के लिए मत भूलना। विधानसभा को हटाने। इसके अलावा आपको संभवत: यदि आवश्यक हो, तो आपकी संस्कृति को दिनांक समय प्रारूप को समायोजित करने की आवश्यकता होगी

मैं बस अमेरिका से एक यात्रा से वापस आया और सभी तस्वीरें संपादित करने के बाद मैंने देखा कि कैमरे ने इज़राइली समय क्षेत्र का इस्तेमाल किया, और अमेरिकी नहीं। एक 7 घंटे का समय अंतर है, इसलिए यह मेरे लिए एक बड़ी समस्या है मेरे पास 175 जीबी फोटो हैं, लेकिन मुझे केवल "केवल" 350 तस्वीरों की परवाह है मैं मैन्युअल रूप से अपने EXIF ​​को संपादित नहीं कर सकता, इसलिए मैंने सी # का उपयोग करने के बारे में सोचा।

विचार यह है कि यह प्रत्येक तस्वीर के EXIF ​​को पढ़ने, समय प्राप्त करेगा, और मूल फोटो में समय शून्य से 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;
    }

वास्तव में कोई प्रोग्रामिंग समाधान नहीं है, लेकिन आप exiftool का उपयोग कर सकते हैं। मैं इसका इस्तेमाल इस सटीक उद्देश्य के लिए करता हूं।

दिनांक / समय शिफ्ट फ़ीचर

क्या आप कभी भी चित्रों का एक गुच्छा लेने से पहले अपने डिजिटल कैमरे पर तिथि / समय सेट करना भूल गए हैं? ExifTool में एक समय शिफ्ट सुविधा होती है जो छवियों के टाइमस्टैम्प को बैच फिक्स को लागू करना आसान बनाती है (उदाहरण के लिए, "एक्सप्लोरर द्वारा रिपोर्ट की गई" तिथि चित्र ले ली "बदलें)। उदाहरण के लिए कहें कि आपका कैमरा घड़ी 2000: 01: 01 00:00:00 को रीसेट कर दिया गया था जब आप 2005 में एक नई बैटरी डालते हैं: 11: 03 10:48:00। फिर आप जो तस्वीरें लीं, उसके बाद में टाइमस्टैम्प हैं जो 5 साल, 10 महीने, 2 दिन, 10 घंटे और 48 मिनट तक गलत हैं। इसे ठीक करने के लिए, सभी छवियों को एक ही निर्देशिका ("DIR") में रखें और exiftool चलाएं:

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

आप टाइमजोनऑफ़सेट फ़ील्ड भी सेट कर सकते हैं, अगर कभी ऐसा सॉफ्टवेयर होता है जो वास्तव में इसका उपयोग करता है





exif