exif_read_data 怎么样才能获取单独的几个值

allen0228 2008-10-17 02:14:18

<?php
if(file_exists('a.jpg')){
$exif = exif_read_data('a.jpg', 0, true);
foreach ($exif as $key => $section) {
foreach ($section as $name => $val) {
echo "$key.$name: $val<br />\n";
}
//print_r($exif);
}
echo '<br /><br />';
}
else{
echo 'Unable to open file a.jpg.';
}
?>

上面的是读取所有的信息 得到的是个二维数组
我想得到
IFD0.DateTime IFD0.Title IFD0.Comments IFD0.Author

我写了好几个方式读取 都没有用

下面的代码是可以读到的
<?php
if(file_exists('a.jpg')){
ini_set('exif.encode_unicode', 'UTF-8');

$exif = exif_read_data('a.JPG', 0, true);
echo $exif['WINXP']['Title'].'<br />';
echo $exif['WINXP']['Comments'].'<br />';
echo $exif['WINXP']['Author'].'<br />';
}
else{
echo 'Unable to open file a.jpg.';
}
?>


我用的winxp apach php5.2.6
这个是不是有缺陷啊 如果环境是linux呢 是不是这个就无法读取
我没分了 全给了
...全文
198 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
程序猿之殇 2008-10-26
  • 打赏
  • 举报
回复
false的时候你才能这样取
echo $exif['DateTime'].'<br />';
echo $exif['Title'].'<br />';
echo $exif['Comments'].'<br />';
echo $exif['Author'];

true的时候你只能这样取
echo $exif['IFDO']['DateTime'].'<br />';
echo $exif['IFDO'][['Title'].'<br />';
echo $exif['IFDO'][['Comments'].'<br />';
echo $exif['IFDO'][['Author'];
程序猿之殇 2008-10-26
  • 打赏
  • 举报
回复
$exif = exif_read_data('a.jpg', 'IFDO', true);
表示会以IFDO为索引返回一个数组.其实等同于$exif = exif_read_data('a.jpg');

array(14) {
["FileName"]=>
string(5) "a.jpg"
["FileDateTime"]=>
int(1223262591)
["FileSize"]=>
int(4659)
["FileType"]=>
int(2)
["MimeType"]=>
string(10) "image/jpeg"
["SectionsFound"]=>
string(27) "ANY_TAG, IFD0, APP12, WINXP"
["COMPUTED"]=>
array(5) {
["html"]=>
string(24) "width="150" height="184""
["Height"]=>
int(184)
["Width"]=>
int(150)
["IsColor"]=>
int(1)
["ByteOrderMotorola"]=>
int(0)
}
["Title"]=>
string(5) "title"
["Comments"]=>
string(12) "sadfasdfasdf"
["Author"]=>
string(6) "author"
["Keywords"]=>
string(4) "sadf"
["Subject"]=>
string(9) "subscript"
["Company"]=>
string(5) "Ducky"
["Info"]=>
string(1) ""
}

$exif = exif_read_data('a.jpg', 'IFDO', false);
返回的数组中,已经包括原来应该以'IFDO'为键名的数组的值了.

array(14) {
["FileName"]=>
string(5) "a.jpg"
["FileDateTime"]=>
int(1223262591)
["FileSize"]=>
int(4659)
["FileType"]=>
int(2)
["MimeType"]=>
string(10) "image/jpeg"
["SectionsFound"]=>
string(27) "ANY_TAG, IFD0, APP12, WINXP"
["COMPUTED"]=>
array(5) {
["html"]=>
string(24) "width="150" height="184""
["Height"]=>
int(184)
["Width"]=>
int(150)
["IsColor"]=>
int(1)
["ByteOrderMotorola"]=>
int(0)
}
["Title"]=>
string(5) "title"
["Comments"]=>
string(12) "sadfasdfasdf"
["Author"]=>
string(6) "author"
["Keywords"]=>
string(4) "sadf"
["Subject"]=>
string(9) "subscript"
["Company"]=>
string(5) "Ducky"
["Info"]=>
string(1) ""
}

还是有很大区别的.
allen0228 2008-10-26
  • 打赏
  • 举报
回复
还有一个问题
$exif = exif_read_data('a.jpg', 'IFDO', false);

$exif = exif_read_data('a.jpg', 'IFDO', true);
这两个不就是一个是数组形式 一个是非数组形式
我想问 我用非数组的形式
然后通过
if(file_exists('a.jpg')){
$exif = exif_read_data('a.jpg', 'IFDO', false);

echo $exif['DateTime'].'<br />';
echo $exif['Title'].'<br />';
echo $exif['Comments'].'<br />';
echo $exif['Author'];

echo '<br /><br />';
}
else{
echo 'Unable to open file a.jpg.';
}

这个来读取
这个也是数组的形式啊 为何 不解
程序猿之殇 2008-10-17
  • 打赏
  • 举报
回复
对,第一种方式是通过的.至少在linux也可以.
如果在linux下用'WINXP'这样的索引,就算正确,也会显得不仑不类的,呵呵.
allen0228 2008-10-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jakey9826 的回复:]
winxp不清楚,
我在windows下,给一个图片加些作者啥的信息.
拿到linux下,也有这个索引值,但是显示的不正常.
[/Quote]

能说清楚一点吗 是图片的摘要显示不正常 还是php读到网页上的不正常
不正常是乱码的意思吗 还是什么信息也没有
allen0228 2008-10-17
  • 打赏
  • 举报
回复
if(file_exists('a.jpg')){
$exif = exif_read_data('a.jpg', 'IFDO', false);

echo $exif['DateTime'].'<br />';
echo $exif['Title'].'<br />';
echo $exif['Comments'].'<br />';
echo $exif['Author'];

echo '<br /><br />';
}
else{
echo 'Unable to open file a.jpg.';
}


if(file_exists('a.jpg')){
ini_set('exif.encode_unicode', 'UTF-8');

$exif = exif_read_data('a.JPG',0, true);

echo $exif['EXIF']['DateTimeOriginal'].'<br />';
echo $exif['WINXP']['Title'].'<br />';
echo $exif['WINXP']['Comments'].'<br />';
echo $exif['WINXP']['Author'].'<br />';
}
else{
echo 'Unable to open file a.jpg.';
}


上面的两种方式在winxp下面全是对的 不过我没有linux环境 所以我也没有在linux下测试
我对linux 一点也不懂 实习结束后 我会看看
程序猿之殇 2008-10-17
  • 打赏
  • 举报
回复
winxp不清楚,
我在windows下,给一个图片加些作者啥的信息.
拿到linux下,也有这个索引值,但是显示的不正常.
allen0228 2008-10-17
  • 打赏
  • 举报
回复
winxp 是那里来的啊 图片本身就有这个吗 还是在winxp系统下面才有的啊
程序猿之殇 2008-10-17
  • 打赏
  • 举报
回复
这样读取一下

$exif = exif_read_data('1111.jpg', "IFD0");


var_dump结果

array(12) {
["FileName"]=>
string(8) "1111.jpg"
["FileDateTime"]=>
int(1222482296)
["FileSize"]=>
int(209337)
["FileType"]=>
int(2)
["MimeType"]=>
string(10) "image/jpeg"
["SectionsFound"]=>
string(20) "ANY_TAG, IFD0, WINXP"
["COMPUTED"]=>
array(5) {
["html"]=>
string(24) "width="998" height="749""
["Height"]=>
int(749)
["Width"]=>
int(998)
["IsColor"]=>
int(1)
["ByteOrderMotorola"]=>
int(0)
}
["Title"]=>
string(5) "huo22"
["Comments"]=>
string(6) "huo555"
["Author"]=>
string(8) "huo66666"
["Keywords"]=>
string(6) "huo444"
["Subject"]=>
string(5) "huo33"
}
程序猿之殇 2008-10-17
  • 打赏
  • 举报
回复
感觉可能和图片有关系吧.
我测试了一下,在window xp和linux下,IFD0是可以,反而是winxp这个索引的的值在linux系统下不正常.

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧