Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

VBA, żaba, CIPA i znaki zapytania

lanzul 21 Maj 2017 17:35 1236 7
  • #1 21 Maj 2017 17:35
    lanzul
    Poziom 21  

    Pytanie na samym wstępie do kolegów z większym doświadczeniem i umiejętnościami - Jak najprościej, przy pomocy VBA, pozyskać z EXIF ".jpg-ów" 'niezaśmieconą' 'Datę wykonania zdjęcia' ?

    Wyniki wyszukiwania w sieci są niejednoznaczne, nie znalazłem tam tego, z czym się spotkałem - poniżej:

    I. Żaba
    =====
    (Żaba z przykładu wyszukana w sieci frazą 'darmowe zdjęcia' - to tak, aby nie było posądzeń o kryptoreklamę)
    VBA, żaba, CIPA i znaki zapytaniafrog-22119...2__340.jpg Download (38.35 kB)

    Pojawił się temat, jak ze zdjęcia formatu ".jpg" wydobyć 'Datę wykonania zdjęcia' z tzw. EXIF, czyli to co anglosasi nazywają 'Date taken of an image'.
    Nie jest to równoznaczne z datą utworzenia zdjęcia, ponieważ system windows traktuje to dość dowolnie i zmienia sobie tę datę w zależności od 'chcenia'.
    Zwykłe FSO sobie z tym nie radzi.
    Z pomocą przyszła metoda 'Folder.GetDetailsOf method' z indeksem 12:
    https://msdn.microsoft.com/pl-pl/library/windows/desktop/bb787870(v=vs.85).aspx

    II. Znaki zapytania
    ============
    I tu pojawiła się dość dziwna sprawa, mianowicie, z pomocą tej powyższej metody udało się co prawda ową 'Date taken' pozyskać, ale "zaśmieconą".
    Przykładowo dla załączonego zdjęcia jest to: "?07-?04-?2017 ??16:22".
    Sprawa wyglądała niby na prostą, zastosuje się funkcję 'InStr' do wyszukania w w/w ciągu pozycji owych "?" i je usunie, albo jeszcze lepiej funkcję 'Replace', która zrobi to za nas samoczynnie i po kłopocie ... ale tylko ogólnie ... w szczegółach wyszło bowiem na jaw, że owe "znaki zapytania", tak nie do końca są "znakami zapytania".

    Funkcje powyższe (InStr i Replace) bowiem nie zadziałały, tj. nic nie pokazały i nic nie zmieniły w owym ciągu znaków "?07-?04-?2017 ??16:22".
    I przed, i po jest to samo, czyli "?07-?04-?2017 ??16:22". Funkcja 'InStr' namiętnie zwraca wartość 0, czyli że nic nie znajduje, a 'Replace' nic z tym "nie robi".

    Nie, to nie ... przypiszę "dziwny ciąg" do zmiennej i wyrzucę z niej znaki "?" w pętli używając funkcji 'Mid' i warunku 'If', czyli coś w tym kształcie:

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod





    I tu ponownie okazało się, że znak "?" nie za bardzo jest znakiem "?".
    Mimo że zmienna znak = "?", to warunek 'If' zwraca 'FALSE', czyli że "?" <> "?" ...
    Sprawdziłem przy pomocy 'TypeName' i 'VarType' co to właściwie jest owe 'ciag_prw = katalog.GetDetailsOf(plik, 12)'.

    Pokazało, że 'String' i '8', a więc najzwyklejszy w świecie ciąg/łańcuch znaków, tekst. Mimo tego 'StrComp' pokazuje, że "?" nie równa się "?", zależnie od typu porównania: "tekstowe" czy "binarne" zwracając albo -1 albo 1, nigdy 0.

    Sprawdziłem, jak się toto wpisuje do komórki arkusza ... wpisało się poprawnie "datą", tyle tylko że tekstowo - dosunięte do lewej krawędzi komórki, ale wyświetla się bez "?", czyli dobrze, natomiast 'MsgBox' informuje, że wpisywaliśmy ze znakami "?"
    Ciekawe, że kiedy do zmiennej przypisze się na sztywno zapis "takiej daty", czyli "?07-?04-?2017 ??16:22", to wszystko działa (InStr, Replace). Tyle tylko, że data jest niewłaściwie kopiowana do komórki arkusza.

    Potyczki ze znakiem "?":
    VBA, żaba, CIPA i znaki zapytaniaInfo o fro..._02_03.jpg Download (237.06 kB)

    III. CIPA
    ======
    Nie mając chwilowo żadnej "pomysły" sprawdziłem co ciotka Googla ma do powiedzenia w tej sprawie i napisałem jej zauważoną, gdzieś wcześniej, w czasie poszukiwań danych o EXIF, frazę:
    "standard of the camera & imaging products association".

    Pomijając dziwne odniesienia i konotacje ciotki Googla do tego sformułowania:
    VBA, żaba, CIPA i znaki zapytaniastandard o...ion_00.jpg Download (77 kB)

    to wywaliło mi całkiem sporą "CIPA DC" do przećwiczenia ... całe 190 pozycji ... znaczy się stron do przejrzenia (Exif2-3.pdf).
    VBA, żaba, CIPA i znaki zapytaniastandard o...ion_01.jpg Download (54.87 kB)

    Nie było źle ... już przy 44, 47 doszedłem ... że data wykonania zdjęcia w EXIF jest typu ASCII o długości 20 bajtów i że nie ma w sobie żadnych znaków "?" lecz zaledwie ":" jako separator. Sprawdziłem, otwierając zdjęcie w notatniku, i jest jak piszą:
    VBA, żaba, CIPA i znaki zapytaniaInfo o fro...jpg_05.jpg Download (265.83 kB)

    Jeśli tak, to spróbowałem w ten sposób:
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    I tu wreszcie zadziałało, wynikiem 'If Asc(znak) = 63 Then ...' było "TRUE", mimo tego 'StrComp' wciąż pokazuje, że "?" <> "?".

    Udało się "oczyścić" zmienną ze znaków-nie znaków "?", lecz doszedł taki mankament, że kiedy taką "oczyszczoną" wartość wpisze się do komórki arkusza, to dni zamieniają się z miesiącami w zakresie od 1 do 12, czyli takie "coś" co zgłaszali już inni użytkownicy forum w swoich zapytaniach. Tutaj jest to zapewne wynikiem niestandardowego formatowania daty w systemie: "dd-MM-rrrr", zamiast "rrrr-MM-dd". Przy formatowaniu dat "pod znaki ':'" dla daty z EXIF otrzymuje się tylko 'tekst':
    VBA, żaba, CIPA i znaki zapytaniaInfo o fro...d-rrrr.jpg Download (21.56 kB)

    Tutaj miało być zobrazowanie, w mp4-ach, działania kodu vba, ale bez względu na to czy chciałem dodawać pliki z punktami, czy bez punktów i tak automat wstawiał sam od siebie pobieranie owych punktów. W każdym bądź razie każdy może sobie prześledzić działanie kodu wg przykładu poniżej.
    Kod:
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    Jak na wstępie,
    moje pytanie do znawców tematu i ludzi z większym doświadczeniem - Jak najprościej, przy pomocy VBA, pozyskać z EXIF ".jpg-ów", 'niezaśmieconą' 'Datę wykonania zdjęcia' ?

    Ps.:
    Można w sieci znaleźć np.: takie rzeczy:
    https://www.pcreview.co.uk/threads/date-of-jpg-photo-file-which-is-taken.3934302/
    i przekierowanie stąd na:
    http://sourceforge.net/projects/exifclass/

    ale ich "objętość" "skutecznie" zniechęca, przy próbie pozyskania takiej 'prostej' rzeczy jak 'data wykonania zdjęcia'.

    0 7
  • #2 21 Maj 2017 19:02
    JRV
    Specjalista - VBA, Excel

    Gdzie jest więcej tych zdjęć ? (EXIF ".jpg-ów")

    0
  • #5 21 Maj 2017 19:51
    lanzul
    Poziom 21  

    JRV napisał:
    juz mam sam

    aha ...
    Z tego co zauważyłem, to nie wszystkie 'jpg-i', tak w ogóle, mają tę datę ... widać czasami zegarek w pstrykaczu był u kogoś tam nieustawiony ... :) ... i lipa ... daty brak, ale większość ma, właśnie w tym formacie "yyyy:mm:dd hh:mm:ss".

    0
  • #6 21 Maj 2017 19:54
    JRV
    Specjalista - VBA, Excel

    nie wszystkie 'jpg-i' jest Exif

    0
  • #8 13 Cze 2017 01:31
    lanzul
    Poziom 21  

    lanzul napisał:
    ... notorycznie, bez pytania zmienia sobie ... wedle własnego uznania ...
    W tym przypadku znaki ":" na "-"

    Szukałem, szukałem ... no i proszę, jakie ludziska mają pomysły:
    Kod: info
    Zaloguj się, aby zobaczyć kod

    Z małą przeróbką w 'MsgBox' ... i jest data bez 'znaków-nie znaków' zapytania:
    Kod: vba
    Zaloguj się, aby zobaczyć kod

    Faktem jest niestety, że linijek kodu jest znacznie więcej niż przy 'Folder.GetDetailsOf method' ... :| ...

    0
TME logo Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME
TME Logo