(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)
exif_read_data — Bir resim dosyasından EXIF başlıklarını okur
$file
, string|null $bölümler
= null
, bool $diziler
= false
, bool $küçük_örnek
= false
) : array|falseBir resim dosyasından EXIF başlıklarını okur Böylece sayısal kameralar tarafından üretilen temel veriler okunabilir.
Exif başlıkları sayısal kameralar tarafından üretilen JPEG/TIFF resimlerde bulunması için tasarlanmışlarsa da ne yazık ki, her sayısal kamera imalatçısı resim başlıklarının elde edilmesi konusunda farklı yaklaşımlara sahiptirler. Bu bakımdan bazı Exif başlıkları resim ü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.
Bilginize:
Windows Me/XP bir kameraya bağlanırken Exif başlıklarını temizler.
kaynak
Resim 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.
FILE | FileName , FileSize ,
FileDateTime , SectionsFound
(Dosyaİsmi, DosyaBoyu, DosyaTarihiSaati, BölümlarVar) |
COMPUTED |
html , Width ,
Height , IsColor (html,
genişlik, yükseklik, Renklidir) ve varsa başkaları.
Height ve Width ,
getimagesize() işlevinin yaptığı gibi
hesaplanır, dolayısıyla bunlar döndürülen başlığın parçaları
olmamalıdır. Ayrıca, html , normal
HTML içinde kullanılacak height/width dizgesidir.
|
ANY_TAG | IFD0 , EXIF , ... gibi bir
yaftaya sahip her türlü bilgi
|
IFD0 |
IFD0 'ın tüm yaftalanmış bilgisi. Normal resim
dosyalarında burada resim boyutu ve saire bulunur.
|
THUMBNAIL |
Dosya ikinci bir IFD 'ye sahipse resmin küçük bir
örneğini içerdiği varsayılır. Küçük resim örneği ile ilgili tüm
veriler bu bölümde saklanır.
|
COMMENT | JPEG resimlerin açıklama başlıkları. |
EXIF |
EXIF bölümü IFD0 bölümünün bir
alt bölümüdür. Burada resim hakkında çok daha fazla bilgi bulunur.
Bu girdilerin çoğu sayısal kamera ile ilgilidir.
|
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 resim örneğinin kendisi okunur. Aksi
takdirde, sadece yaftalı veriler okunur.
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.
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.
Sürüm: | Açıklama |
---|---|
8.0.0 |
bölümler artık boş olabiliyor.
|
7.2.0 |
kaynak değiştirgesi normal dosyalardan başka
artık akımları da destekliyor.
|
7.2.0 |
Aşağıdaki EXIF biçemlerine destek eklendi:
|
Ö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" : "Resim 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";
}
}
?>
Resim 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: Resim 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
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
değiştirgesi 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.