exif_read_data
(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)
exif_read_data — Bir görüntü dosyasından EXIF başlıklarını okur
Açıklama
Exif başlıkları sayısal kameralar tarafından üretilen JPEG/TIFF görüntülerde
bulunması için tasarlanmışlarsa da ne yazık ki, her sayısal kamera
imalatçısı görüntü başlıklarının elde edilmesi konusunda farklı yaklaşımlara
sahiptirler. Bu bakımdan bazı Exif başlıkları görüntü üzerinde mevcut
olmayabilir.
Height
ve Width
başlıkları
getimagesize() işlevinin yaptığı gibi hesaplandığından
döndürülen başlığın birer parçası olmamalıdırlar. html
başlığı normal HTML içinde kullanılacak metnin
yükseklik/genişlik dizgesidir.
Bir Exif başlığı bir telif hakkı bilgisi içerdiği takdirde, bu iki değerden
oluşur. Çözüm Exif 2.10 standadıyla uyumsuz olup COMPUTED
bölümü hem Copyright.Photographer
hem de
Copyright.Editor
başlıklarını içerirken
IFD0 bölümleri iki girdiyi ayıran null
karakterli bayt
dizisini içerir. Eğer veri türü yanlışsa sadece ilk girdi döner (Exif'in
normal davranışı). COMPUTED
bölümü ayrıca,
Copyright
dizgesini de içerir ve bu dizge
ya özgün telif hakkı dizgesini ya da fotoğraf ve eser düzenleyici telif
haklarını içeren dizgeyi içerir.
UserComment
yaftası Copyright
yaftası
ile aynı sorunlara sahiptir. O da iki değer saklayabilir. İlki kullanılan
kodlama, ikincisi değerin kendisidir. Bu durumda, IFD
bölümü sadece kodlamayı ve bayt dizisini içerir. COMPUTED
bölümü UserCommentEncoding
ve
UserComment
girdilerinin ikisini de saklar.
UserComment
girdisi her iki durumda da mevcuttur,
dolayısıyla IFD0
bölümündeki değere tercihan kullanılmış
olmalıdır.
exif_read_data() işlevi ayrıca, EXIF belirtimine uygun
olarak EXIF veri başlıklarını da doğrular.
Bağımsız Değişkenler
kaynak
-
Görüntü dosyasının yeri. Bir dosya yolu (akım sarmalayıcılar
belirtilebilir) veya resource türünde bir akım.
bölümler
-
Sonuç dizisinin üretiminde kullanılmak üzere dosyadaki başlıkların
virgül ayraçlı listesi. Belirtilen başlıkların hiçbiri bulunamazsa
işlev false
döndürür.
diziler
-
Her bölümün bir dizi haline getirilip getirilmeyeceğini belirler.
COMPUTED
, THUMBNAIL
ve
COMMENT
bölümleri, diğer bölümlerle karışmaması için
daima bir dizi haline getirilirler.
küçük_örnek
-
true
belirtilmişse küçük görüntü örneğinin kendisi okunur. Aksi
takdirde, sadece yaftalı veriler okunur.
Dönen Değerler
Dönen değer bir dizi olup, dizi indisleri başlık isimlerini, değerler bu
başlıklarla ilgili verileri içerir. Eğer hiçbir veri döndürülemezse
exif_read_data() işlevi false
döndürür.
Hatalar/İstisnalar
Desteklenmeyen başlıklar veya olası hata durumlarında
E_WARNING
ve/veya E_NOTICE
seviyesinde hata üretilebilir, fakat işlev hala anlaşılabilir bilgileri
okumaya çalışır.
Örnekler
Örnek 1 - exif_read_data() örneği
<?php
echo "test1.jpg:<br />\n";
$exif = exif_read_data('tests/test1.jpg', 'IFD0');
echo $exif===false ? "<Başlık verisi bulunamadı.<br />\n" : "Görüntü başlıkları içeriyor<br />\n";
$exif = exif_read_data('tests/test2.jpg', 0, true);
echo "test2.jpg:<br />\n";
foreach ($exif as $key => $section) {
foreach ($section as $name => $val) {
echo "$key.$name: $val<br />\n";
}
}
?>
Görüntü başlık bilgisi içermediğinden ilk çağrı başarısız olur.
Yukarıdaki örnek şuna benzer bir çıktı üretir:
test1.jpg:
Başlık verisi bulunamadı.
test2.jpg:
FILE.FileName: test2.jpg
FILE.FileDateTime: 1017666176
FILE.FileSize: 1240
FILE.FileType: 2
FILE.SectionsFound: ANY_TAG, IFD0, THUMBNAIL, COMMENT
COMPUTED.html: width="1" height="1"
COMPUTED.Height: 1
COMPUTED.Width: 1
COMPUTED.IsColor: 1
COMPUTED.ByteOrderMotorola: 1
COMPUTED.UserComment: Exif test image.
COMPUTED.UserCommentEncoding: ASCII
COMPUTED.Copyright: Photo (c) M.Boerger, Edited by M.Boerger.
COMPUTED.Copyright.Photographer: Photo (c) M.Boerger
COMPUTED.Copyright.Editor: Edited by M.Boerger.
IFD0.Copyright: Photo (c) M.Boerger
IFD0.UserComment: ASCII
THUMBNAIL.JPEGInterchangeFormat: 134
THUMBNAIL.JPEGInterchangeFormatLength: 523
COMMENT.0: Comment #1.
COMMENT.1: Comment #2.
COMMENT.2: Comment #3end
THUMBNAIL.JPEGInterchangeFormat: 134
THUMBNAIL.Thumbnail.Height: 1
THUMBNAIL.Thumbnail.Height: 1
Örnek 2 - PHP 7.2.0 itibariyle exif_read_data()
akımları destekliyor
<?php
// Bir dosya açar, bu ikil kipte olmalı
$fp = fopen('/path/to/image.jpg', 'rb');
if (!$fp) {
echo 'Hata: Görüntü okumak için açılamadı';
exit;
}
// Exif başlıklarını okumaya çalış
$headers = exif_read_data($fp);
if (!$headers) {
echo 'Hata: Exif başlıkları okunamadı';
exit;
}
// 'COMPUTED' başlıklarını bas
echo 'EXIF Headers:' . PHP_EOL;
foreach ($headers['COMPUTED'] as $header => $value) {
printf(' %s => %s%s', $header, $value, PHP_EOL);
}
?>
Yukarıdaki örnek şuna benzer bir çıktı üretir:
EXIF Headers:
Height => 576
Width => 1024
IsColor => 1
ByteOrderMotorola => 0
ApertureFNumber => f/5.6
UserComment =>
UserCommentEncoding => UNDEFINED
Copyright => Denis
Thumbnail.FileType => 2
Thumbnail.MimeType => image/jpeg
Notlar
Bilginize:
mbstring etkinse,
unicode karakterleri işlemeye çalışır ve exif.decode_unicode_motorola
ve exif.decode_unicode_intel
ile belirtilen karakter kümesini seçer. Exif eklentisi karakter kodlamasını
bulmaya çalışmaz. Kullanıcı exif_read_data() işlevini
çağırmadan önce bu iki ini yönergesinden birine uygun karakter kodlamasını
belirtmelidir.
Bilginize:
kaynak
bağımsız değişkeni işleve bir akım aktarmak için
kullanılmışsa, akım araştırılabilri olmalıdır. Bu işlev döndükten sonra
dosya göstericisinin yeri değişmeyecektir.