Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [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
 
Start new topic
Odpowiedzi (1 - 13)
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 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 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ę snitch.gif 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ę 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 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= smile.gif smile.gif

No jest w nich mały haos, ale dzięki nazwom można wyodrębnić poszczególne wartości 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 smile.gif
To jest tzw. zdjęcie w zdjęciu 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
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 13:46