Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Pel-> tworzenie danych Exif
Forum PHP.pl > Forum > Przedszkole
Radeqq
Do zapisu danych Exif w jpeg znalazłem PEL, przykład zapisu z tej strony - pozwolę sobie zacytować:

  1.  
  2. function loadwritedesc($file, $input_text, $input_text2, $input_text3){
  3.  $jpeg = new PelJpeg();
  4.  $tifff = $tiff=getBytes();
  5.  $jpeg->loadFile($file);
  6.  $app1 = $jpeg->getSection(PelJpegMarker::APP1);
  7.  $tiff = $app1->getTiff();
  8.  $ifd0 = $tiff->getIfd();
  9.  $exif = $ifd0->getSubIfd(PelTag::EXIF_IFD_POINTER);
  10.  // create and overwrite image_description tag and write the text
  11.   $describer = new PelEntryAscii(PelTag::XP_TITLE, $input_text);
  12.   $ifd0->addEntry($describer);
  13.   file_put_contents($file, $jpeg->getBytes());
  14.  
  15. }


XP_TITLE ładnie tworzy tytuł zdjęcia widoczny w Windowsie. I tu pojawia się problem, ponieważ tytuł tworzy tylko wtedy jeśli zdjęcie zostało zrobione np. aparatem lub istnieją już jakieś dane Exfif (czyt. sami je wpiszemy). Natomiast jeśli zdjęcie zostało utworzone w PHP ( imagecreatefromjpeg($zdjecie); ) to (prawdopodobnie) dane Exif nie istnieją i skrypt wywala błąd:
Cytat
Fatal error: Call to a member function getTiff() on a non-object in...
- nie mam pojęcia jak zadeklarować dane Exif

W manualu znalazłem coś w tym stylu:
Cytat
getBytes (line 157)

Produce bytes for the Exif data.
return: bytes representing this object.
string getBytes ()
ale nie mam pojęcia czy to jest to i jak tego użyć. Proszę o pomoc, dziękuję.

thek
Zerknąłem na stronę i muszę Cię rozczarować. Ta funkcja konwertuje obiekt PEL do ciągu bajtów, dzięki czemu można obrazek wyświetlić. Nie modyfikuje ona exif.

Nie masz jednak co się martwić... Radze Ci się przyjrzeć czemuś innemu...
http://pl2.php.net/manual/en/function.iptcembed.php
Radeqq
Niestety dane ustawione w IPTC nie są widoczne w Windowsie. Pozwolę sobie załączyć obrazek. Moin celem jest edytowanie i tworzenie tych ustawień widocznych na obrazku w php. Gdy taki sam obrazek załączyłem do funkcji podanej w manualu - nie udało mi się wyświetlić żadnych zapisanych przez Windows. Dopiero jeśli sobie je sam zapisałem (np. echo $i->set(IPTC_COPYRIGHT_STRING,"Here goes the new data"); 
$i->write(); ) to były widoczne ale tylko w funkcji - nie w Xp.


Natomiast przy:

  1. <?php
  2. $exif = exif_read_data('./ultraobraz.jpg', 0, true);
  3. echo "test2.jpg:<br />\n";
  4. foreach ($exif as $key => $section) {
  5.   foreach ($section as $name => $val) {
  6.   echo "$key.$name: $val<br />\n";
  7.   }
  8. }
  9. ?>


Wyświetla:

Cytat
IFD0.Exif_IFD_Pointer: 236
IFD0.Title: teksttytuBu
IFD0.Comments: jaki[ komentarz
IFD0.Author: autorzdjcia
IFD0.Keywords: sBowapodkluczowe
IFD0.Subject: tematzdjcia
COMMENT.0: CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality
EXIF.UserComment: CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality
WINXP.Title: tekst tytu?u
WINXP.Comments: jaki? komentarz
WINXP.Author: autor zdj?cia
WINXP.Keywords: s?owa podkluczowe
WINXP.Subject: temat zdj?cia


Czyli za te informacje odpowiada WINXP.Title:IFD0.Title: . Teraz albo poszukać odpowiedniego id tagu w IPTC (questionmark.gif a ja wciąż nie widzę różnicy pomiędzy Exif, IPTC ) albo zastosować PEL'a (patrz kod php w pierwszym poście), które modyfikuje dane tylko wtedy jeśli już coś zostało wprowadzone (czyli pozostaje pytanie - jak zasymulować wprowadzanie danych (exif)).

thek
Tu masz w miarę ładnie wytłumaczone oba pojęcia
http://www.sphoto.com/techinfo/rawconverte...es/exifiptc.htm
http://blog.peterhaza.no/working-with-imag...aders-from-php/
Drugi link podaje jak zmieniać iptc, ale nie exif
Ale istnieją opensource'owe rozwiązania winksmiley.jpg
http://sourceforge.net/projects/openexif/
http://edit-exif.sourceforge.net/
Myslę, że one Cię mogą zainteresować smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.