CodeIgniter框架怎么实现图片EXIF信息读取

来源:3D模型作者:小诸葛头衔:草根站长
导读:本期聚焦于小伙伴创作的《CodeIgniter框架怎么实现图片EXIF信息读取》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《CodeIgniter框架怎么实现图片EXIF信息读取》有用,将其分享出去将是对创作者最好的鼓励。

在CodeIgniter框架中实现图片EXIF信息读取,核心依赖PHP的exif扩展,通过封装对应的功能方法,可以快速获取图片的拍摄时间、相机型号、光圈、快门等拍摄相关数据,适用于相册系统、图片管理后台等场景。

CodeIgniter框架怎么实现图片EXIF信息读取

环境准备

首先需要确保PHP环境已经安装并启用了exif扩展,同时需要开启mbstring扩展,避免中文编码出现乱码问题。可以通过phpinfo()函数查看扩展是否启用,若未启用,在php.ini中添加以下配置后重启服务:

extension=exif
extension=mbstring

功能实现步骤

1. 创建EXIF读取辅助函数

在CodeIgniter的application/helpers目录下创建exif_helper.php文件,封装EXIF信息读取的核心逻辑:

<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');

/**
 * 读取图片EXIF信息
 * @param string $image_path 图片绝对路径
 * @return array|false 成功返回EXIF数组,失败返回false
 */
function read_image_exif($image_path)
{
    // 检查文件是否存在
    if (!file_exists($image_path)) {
        return false;
    }
    // 检查文件是否为图片
    $image_info = @getimagesize($image_path);
    if (!$image_info) {
        return false;
    }
    // 仅支持JPEG和TIFF格式
    $allowed_types = array(IMAGETYPE_JPEG, IMAGETYPE_TIFF_II, IMAGETYPE_TIFF_MM);
    if (!in_array($image_info[2], $allowed_types)) {
        return false;
    }
    // 读取EXIF信息
    $exif_data = @exif_read_data($image_path, 'ANY_TAG', true);
    if (!$exif_data) {
        return false;
    }
    // 整理常用EXIF字段
    $result = array();
    // 拍摄时间
    if (isset($exif_data['EXIF']['DateTimeOriginal'])) {
        $result['shoot_time'] = $exif_data['EXIF']['DateTimeOriginal'];
    }
    // 相机品牌
    if (isset($exif_data['IFD0']['Make'])) {
        $result['camera_make'] = $exif_data['IFD0']['Make'];
    }
    // 相机型号
    if (isset($exif_data['IFD0']['Model'])) {
        $result['camera_model'] = $exif_data['IFD0']['Model'];
    }
    // 光圈值
    if (isset($exif_data['EXIF']['FNumber'])) {
        $fnumber = $exif_data['EXIF']['FNumber'];
        $result['aperture'] = 'f/' . ($fnumber[0] / $fnumber[1]);
    }
    // 快门速度
    if (isset($exif_data['EXIF']['ExposureTime'])) {
        $exposure = $exif_data['EXIF']['ExposureTime'];
        if ($exposure[1] == 1) {
            $result['shutter_speed'] = $exposure[0] . 's';
        } else {
            $result['shutter_speed'] = '1/' . $exposure[1] * $exposure[0] . 's';
        }
    }
    // ISO值
    if (isset($exif_data['EXIF']['ISOSpeedRatings'])) {
        $result['iso'] = $exif_data['EXIF']['ISOSpeedRatings'];
    }
    // 图片宽度
    $result['width'] = $image_info[0];
    // 图片高度
    $result['height'] = $image_info[1];
    return $result;
}

2. 在控制器中调用功能

创建图片处理控制器,加载辅助函数后调用EXIF读取方法,处理上传的图片或者指定路径的图片:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Image extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
        // 加载自定义EXIF辅助函数
        $this->load->helper('exif');
    }

    /**
     * 读取指定路径图片的EXIF信息
     */
    public function read_exif()
    {
        // 图片绝对路径,实际项目中可替换为上传后的图片路径
        $image_path = FCPATH . 'uploads/test.jpg';
        $exif_info = read_image_exif($image_path);
        if ($exif_info) {
            echo '<pre>';
            print_r($exif_info);
            echo '</pre>';
        } else {
            echo '读取EXIF信息失败,请检查图片格式或路径是否正确';
        }
    }

    /**
     * 处理上传图片并读取EXIF
     */
    public function upload_image()
    {
        // 简单上传处理逻辑
        $config['upload_path'] = FCPATH . 'uploads/';
        $config['allowed_types'] = 'jpg|jpeg|tiff';
        $config['max_size'] = 2048;
        $this->load->library('upload', $config);
        if ($this->upload->do_upload('image_file')) {
            $upload_data = $this->upload->data();
            $image_path = $upload_data['full_path'];
            $exif_info = read_image_exif($image_path);
            $data['exif_info'] = $exif_info;
            $this->load->view('image_exif_result', $data);
        } else {
            echo $this->upload->display_errors();
        }
    }
}

3. 结果展示视图

创建application/views/image_exif_result.php视图文件,展示读取到的EXIF信息:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>图片EXIF信息结果</title>
</head>
<body>
<h2>图片EXIF信息</h2>
<?php if (isset($exif_info) && $exif_info): ?>
<table border="1" cellpadding="10" cellspacing="0">
    <tr>
        <th>字段</th>
        <th>值</th>
    </tr>
    <?php foreach ($exif_info as $key => $value): ?>
    <tr>
        <td><?php echo $key; ?></td>
        <td><?php echo $value; ?></td>
    </tr>
    <?php endforeach; ?>
</table>
<?php else: ?>
<p>未获取到EXIF信息</p>
<?php endif; ?>
</body>
</html>

注意事项

  • EXIF信息仅存在于JPEG、TIFF等格式的图片中,PNG、GIF等格式无法读取EXIF数据
  • 部分图片可能被编辑软件清除EXIF信息,读取时会返回空结果
  • 若读取中文相机型号出现乱码,可在输出时使用mb_convert_encoding函数转换编码
  • 生产环境中建议对图片路径做安全校验,避免路径遍历漏洞

CodeIgniterEXIF信息读取拍摄数据解析PHP修改时间:2026-07-20 16:33:44

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。