Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] EXIF i ISOSpeedRatings
Regss
post
Post #1





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 7.05.2006

Ostrzeżenie: (0%)
-----


Witam! Mam następujący problem, chcem z obrazka jpeg wyciągnąć dane o ISOSpeed napisałem taki skrypt:

Kod
<?
$exif = exif_read_data('test3.jpg', 'Exif');
echo $exif['Model']; echo "<br>";
echo $exif['DateTime'];echo "<br>";
echo $exif['ExposureTime'];echo "<br>";
echo $exif['ISOSpeedRatings'];echo "<br>";
echo $exif['FNumber'];echo "<br>";
echo $exif['FocalLength'];echo "<br>";
?>


ale niestety miejsce gdzie ma się pojawić informacja o ISOSpeed jest puste, tak jak by ISOSpeedRatings wogóle nie działało, może mi ktoś pomóc?
Go to the top of the page
+Quote Post
strife
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 605
Pomógł: 96
Dołączył: 22.10.2004
Skąd: UK

Ostrzeżenie: (0%)
-----


Nie miałem styczności z tą instrukcją, jednak myślę, że powinieneś zacząć od prostego sprawdzenia czy taki klucz w tablicy istnieje w taki sposób:
  1. <?php
  2.  
  3. $exif = exif_read_data('test3.jpg', 'Exif');
  4. echo '<pre>';
  5. echo print_r( $exif );
  6.  
  7. ?>

I teraz masz jak na tacy wszystkie elementy. Jak znajdę coś więcej dopisze (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Może pomyliłeś wielkość liter?

Ten post edytował strife 7.05.2006, 18:19:56
Go to the top of the page
+Quote Post
Master Miko
post
Post #3





Grupa: Zarejestrowani
Postów: 530
Pomógł: 0
Dołączył: 15.01.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


1. Jakiego aparatu używasz i czy jest on analogowy czy cyfrowy?
2. Jaką masz wersję exifa?
3. Jaki masz program do konwertowania zdjęć?

Pytam się, bo exif nie do końca wyciąga wszyskie dane. Np w ogóle nie rusza wielu danych zdjęcia po obróbce photoshopa...

Ale jeśli ta funkcja spełnia Twoje wymagania, to ok (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował Master Miko 7.05.2006, 18:36:43
Go to the top of the page
+Quote Post
Regss
post
Post #4





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 7.05.2006

Ostrzeżenie: (0%)
-----


Aparat to cyfrak Canon PowerShot A75, program do zrzucania fotek to canon zoombrowser dołączony do aparatu, zgodność z EXIF 2.2, testuje na Apache2 + php 5.0 zdjęć nie konwertowałem inne dane takie jak przesłone, czas migawki skrypt podaje prawidłowo. Po uruchomieniu skryptu podanego przez strife'a większość danych wyskakuje prawidłowa lecz gdzieniegdzie są "kwadraciki" a tej funkcji ISOSpeedRatings nie pokazuje na innym zdjęciu robionym nikonem też cyfruwką wszystko jest ok i pokazuje tą funkcje. Ale ciekawostką jest to, że testując skrypt exifer ze strony http://www.offsky.com/software/exif/index.php w fotce z canona wszystko jest jak należy. Lecz ten skrypt jest strasznie duży jak na funkcje którą ma spełniać.

P.S. Ja sie wogóle nie znam na php więc wybaczcie wszystko :roll2:
Go to the top of the page
+Quote Post
Master Miko
post
Post #5





Grupa: Zarejestrowani
Postów: 530
Pomógł: 0
Dołączył: 15.01.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


ee tam, nauczysz się (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif) (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

No widzisz... exif by php ma problemy z niektórymi standardami.. (bo oczywiście każda firma musi robić własne...) daltego niektórzy piszą biblioteki, żeby ze wszystkim działało.

Ten exifer ciężki może jest (ok. 110kb) ale z kodu widać że dobrze działa bo przecież przeszukuje plik zdjęciowy!

Ja z kolei, znalazłem inny skrypt działający na postawie xmlu, który pobiera wartości, które tak naprawdę manualnie trzeba wpisać i niestety je jeszcze obrobić...ale zaimplementowałem go do innego skryptu - zapisaującego do bazy danych i w ten sposób robi się to raz.
Funkcje exifowe (może się myle) ale z kodu wygląda tak, że raczej potrzebują dużej mocy obliczeniowej.

Ten post edytował Master Miko 7.05.2006, 18:59:14
Go to the top of the page
+Quote Post
Regss
post
Post #6





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 7.05.2006

Ostrzeżenie: (0%)
-----


No to pozostaje mi tylko urzyć tego exifer'a a wiesz może jak z niego korzystać bo przez tą funkcje print w index.php wyświetla się cała tablica a ja bym chciał tylko kilka wybranych tagów niestety nie ma nigdzie (albo ja niedowidze) opisanego jak z tego korzystać. np. jak wyświetlić tylko ISOSpeedRatings dalej sobie już poradze ;]
Go to the top of the page
+Quote Post
Master Miko
post
Post #7





Grupa: Zarejestrowani
Postów: 530
Pomógł: 0
Dołączył: 15.01.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


To pokaż tę tablicę (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Regss
post
Post #8





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 7.05.2006

Ostrzeżenie: (0%)
-----


Już doszedłem jak z niego korzystać jednak nie działa tak jak powinien ponieważ dla każdego zdjęcia robionego innym aparatem tworzy troche inną tablice. np.

Dla fotki robionej NIKONEM.
Kod
[SubIFD] => Array
        (
            [ExposureTime] => 1/20 sec
            [FNumber] => f 3.6
            [ExposureProgram] => Program
            [ISOSpeedRatings] => 200
            [ExifVersion] => version 2.2
            [DateTimeOriginal] => 2005:12:30 17:45:28


i żeby wywołać to musze wisać coś takiego: echo $result['SubIFD']['ISOSpeedRatings'];

Natomias już dla fotki zrobionej Canonem częśćtablicy w której zawarta jest informacja o ISO wygląda tak:
Kod
[SubIFD] => Array
        (
            [ExposureTime] => 1/250 sec
            [FNumber] => f 8
            [ExifVersion] => version 2.2
            [DateTimeOriginal] => 2006:05:07 13:04:01
            [DateTimedigitized] => 2006:05:07 13:04:01
            [ComponentsConfiguration] => YCbCr
            [CompressedBitsPerPixel] => 5
            [ShutterSpeedValue] => 1/250 sec
            [ApertureValue] => f 8
            [ExposureBiasValue] => 0 EV
            [MaxApertureValue] => f 4.8
            [MeteringMode] => Spot
            [Flash] => No Flash
            [FocalLength] => 16.21875 mm
            [MakerNote] => Array
                (
                    [MakerNoteNumTags] => 18
                    [Settings 1] => Array
                        (
                            [RAWDATA] =>
                            [Bytes] => 92
                            [Macro] => Macro
                            [SelfTimer] => Off
                            [Quality] => Superfine
                            [Flash] => Off
                            [DriveMode] => Single/Timer
                            [Unknown] => 0
                            [FocusMode] => 0
                            [ImageSize] => Large
                            [EasyShooting] => Manual
                            [DigitalZoom] => No Digital Zoom
                            [Contrast] => Normal
                            [Saturation] => Normal
                            [Sharpness] => Normal
                            [ISO] => 400
                            [MeteringMode] => 1
                            [FocusType] => Close-up (Macro)
                            [AFPointSelected] => 8197
                            [ExposureMode] => Manual
                            [LongFocalLength] => 519
                            [ShortFocalLength] => 173
                            [FocalUnits] => 32
                            [FlashActivity] => 65535
                            [FlashDetails] =>


i nie moge wyświetlić wogóle chociaż w tablicy dane te są zawarte.

Może zna ktoś jakiś inny dobry skrypt który systematyzuje wszystkie tablice od różnych aparatów?
Go to the top of the page
+Quote Post
Master Miko
post
Post #9





Grupa: Zarejestrowani
Postów: 530
Pomógł: 0
Dołączył: 15.01.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


no to może spróbuj zwykłym exifem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
ostatnio bawiłem się tą funkcją pod wpyłwem tej rozmowy.
Oto taki mały skrypcik który wyświela wszyskie informacjie (dałem all). No tylko jak mówiłem na samym początku, ma problemy z obróbką photoshopową :/

oto taki mały skrypcik, wygodny do testów:

  1. <?php
  2.  
  3.  
  4. if(isset($_GET['plik']) && !empty($_GET['plik'])) {
  5. $plik = $_GET['plik'];
  6. $plik = str_replace("./","",$plik);
  7.  
  8. $piP = pathinfo($plik);
  9. $ext = $piP['extension'];
  10.  
  11.  
  12. if(file_exists($plik) && is_file($plik) && in_array($ext, $allowedFiles)) {
  13.  
  14. echo "<table><tr><td>";
  15.  
  16. $exif = exif_read_data($plik, 'ANY_TAG', true, true);
  17. if(is_array($exif)) {
  18. foreach ($exif as $key => $section) {
  19. foreach ($section as $name => $val) {
  20. echo "$key.$name: $val<br>\n";
  21. }
  22. }
  23. } else { echo "No exif data"; }
  24. echo "</td><td>";
  25. echo '<img src="' . $plik . '"></td></tr></table>';
  26.  
  27.  
  28. } else {
  29. echo '<font color="red">Plik '. $plik .' nie istnieje! Spróbuj ponownie</font>';
  30. }
  31. }
  32.  
  33.  
  34. ?>


używasz tak: skrypt.php?=nazwazdjecia.jpg
obok wszyskich danych jakie w ogóle można wyciągnąć przez funkcje phpowską znajduje się zdjęcie.

Ale co do schematyzacji nie wiem czy to Cię zadowoli
Go to the top of the page
+Quote Post
Regss
post
Post #10





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 7.05.2006

Ostrzeżenie: (0%)
-----


Cytat(Master Miko @ 2006-05-08 11:57:11)
używasz tak: skrypt.php?=nazwazdjecia.jpg

chyba mała pomyłka powinno być: skrypt.php?plik=nazwazdjecia.jpg

pozwoliłem sobie zmodyfikować Twój skrypt na troche prościeszy bo nie działał nie wiem czemu:

Kod
<?php
$plik = $_GET['plik'];

$exif = exif_read_data($plik, 'ANY_TAG', true, true);
        if(is_array($exif)) {
        foreach ($exif as $key => $section) {
            foreach ($section as $name => $val) {
                echo "$key.$name: $val<br>\n";
            }
        }
        } else { echo "No exif data"; }
?>


tablice się ukazują ale jest w nich mały haos.

Zdjęcie wykonane canonem A75:
http://regss.no-ip.org/test/index.php?plik=test1.jpg
Wogóle nie ma tagu o ISO

Zdjęcie wykonane NIKONEM:
http://regss.no-ip.org/test/index.php?plik=test4.jpg
ISO jest ale też występuje mały haos.

Obydwa zdjęcia są prosto z aparatu nie konvertowane nawet nie otwierane w innych edytorach.

Może ma to coś wspólnego z moją wersją php, Apatcha2 albo z konfiguracją?
Jeśli możesz sprawdz te zdjęcie czy Tobie równierz wyskakują krzaczki:
http://regss.no-ip.org/test/test1.jpg
Go to the top of the page
+Quote Post
Master Miko
post
Post #11





Grupa: Zarejestrowani
Postów: 530
Pomógł: 0
Dołączył: 15.01.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


tak powinno być plik= (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

No jest w nich mały haos, ale dzięki nazwom można wyodrębnić poszczególne wartości (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

a co do ISO... widać, że canon jest głupi i nie trzyma standardów exif...

test/test1.jpg - nie wyskakują mi krzaczki.

Jeśli masz najnowsze php i apacha 2 to znaczy że u Ciebie wszystko ok, ale nie wszystko ok u canona....
Go to the top of the page
+Quote Post
Regss
post
Post #12





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 7.05.2006

Ostrzeżenie: (0%)
-----


Czyli coś musi być nie tak u mnie, ponieważ mi przy test1.jpg wyskakuje pełno "krzaków" oto wycinek z przeglądarki:

http://regss.no-ip.org/test/screen.jpg

Dobrze myśle?

Ten post edytował Regss 8.05.2006, 20:04:27
Go to the top of the page
+Quote Post
Master Miko
post
Post #13





Grupa: Zarejestrowani
Postów: 530
Pomógł: 0
Dołączył: 15.01.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Wszystko jest ok. To jest exifowy tumbnail (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
To jest tzw. zdjęcie w zdjęciu (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Tzn exif robi odrazu miniatrukę w exifie, żeby szybciej wczytywały się zdjęcia.
Go to the top of the page
+Quote Post
Regss
post
Post #14





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 7.05.2006

Ostrzeżenie: (0%)
-----


Znalazlem cos nowego poniewaz tamte rozwiazania mnie nie zadowalaly.
Mianowicie cos takiego: http://www.sentex.net/~mwandel/jhead/ napisany w jezyku c tylko nie moge napisac teraz skryptu ktory wykonal by mi operacje po wpisaniu czegos takiego:

Kod
<?php
$jhead = "usr/bin/jhead";
$image = "test1.jpg";
$command = "$jhead -exonly $image";
echo "$command";
?>


Ale wyskakuje mi tylko napis "usr/bin/jhead -exonly test1.jpg" moze mi ktos podpowiedziec jak to uruchomic? Bo ja jestem zielony w php.

edit:
Juz sam doszedlem:
Kod
<?php
  $PicFile = "c:/test1.jpg";
  exec("/usr/bin/jhead $PicFile", $OutputArray);
  $OutputString = implode($OutputArray, " ");
  print "<b>$OutputString</b>";
?>


Ten post edytował Regss 9.05.2006, 23:47:30
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 13:30